左右手坐标系区别和联系

2023-11-19

本文是分析,所谓的右手坐标系转换为左手坐标系需要的:

z轴取反;x轴取反(或者改变摄像机位置); 渲染绕序改变,其中的进一步的原因。

参考文章:

https://msdn.microsoft.com/en-us/library/bb204853%28VS.85%29.aspx

http://blog.csdn.net/augusdi/article/details/20450691

一、三角形网格数据

1.三角网格顶点数据改变

记得左手坐标系中摄像机坐标系是z轴正方西向里的,右手坐标系中摄像机坐标系是z轴负方西向里的,所以:

1)经典:右手坐标系转换为左手的时候需要三角网格数据z轴翻转

2)美术软件中:3DS MAX中却要y-z相互翻转

例如:

仔 细分析一下上述过程,我们面临的问题其实可分为两个层面,一个是骨骼计算层面,而另一个则是模型绘制层面。真正正确的做法是:不能将两者混为一谈,必须对 其过程进行严格区分,即,计算时不应该考虑绘制时所面临左右手系相关的问题,反之亦然。

3ds max中数据转换到左手坐标系的旋转矩阵。

(1 0 0 0 )
(0 0 1 0 )
(0 1 0 0 )
(0 0 0 1)

为什么是这样? 渲染时候应该Z轴取反,Z取反得到顶点坐标,然后渲染时候取背面进行渲染,设置摄像机和投影变换为左手坐标系的就可以了。
因为这里绘制的时候从3DS Max的右手坐标系( y朝里z朝上 )转换为左手坐标系的,刚好max中看到的三角网格数据转换为了D3D中的网格数据。

3)观察位置导致的正反-摄像机位置改变或者x值翻转

还要注意因为视图坐标系z轴改变的原因,如果摄像机坐标系变了但是观察位置没有变,那么x值需要翻转(如果摄像机位置恰当改变了那么则不需要)。

2.渲染时候,三角网格索引数据改变

渲染时候因为平面的判断,左手坐标系中是顺时针为正面,右手坐标系中逆时针为正面。

3.渲染时候,三角网格UV坐标系

如果绘制的顺序正面改变了,那么UV坐标也是要和索引缓存一样改变的。

二、绕序和正面-叉积和旋转数据的变换改变

4.叉积向量和旋转数据的变化

向量叉积方西会改变,旋转方西会改变;所以之前存放的法向量因为顶点改变了需要计算下,选择矩阵或四元数要改变。
例如:
A. 在左手系下,旋转轴向量为n顺时钟旋转t,则有:
q=[cos(t/2)  sin(t/2)n]
q=
[cos(t/2)  sin(t/2)nx  sin(t/2)ny  sin(t/2)nz]
q=
[w x y z]
B. 在右手系下,旋转轴向量为n,逆时钟旋转t,则有:
q=[cos(t/2)  sin(t/2)n]
q=
[cos(t/2)  sin(t/2)nx  sin(t/2)ny  sin(t/2)nz]
q=
[w x y z]
可以发现,唯一的区别在于,左右手系下角度t的旋转定义是相反的。Quarternion的四个分量,后面x/y/z三个分量在不同的坐标系下应该符号互反
也就是3DS MAX中存储的四元数,转换到D3D中变成该四元数的逆了,因为旋转角度没变,旋转轴改变了。

三、视图和透视投影坐标系差别

5.视图坐标系中差异

本地和世界坐标系中三角变换即可,而视图坐标系需要注意右手中定义是eye-at为z轴且往-z方向渲染,左手则at-eye为z轴且往z轴方向渲染,的可能需要改变下; 透视投影中OGL右手坐标系是将z放置到了[-1,1],D3D中右手坐标系是将z放置到了[0,1]。

得到参考位置差别:还要注意因为视图坐标系z轴改变的原因,如果摄像机坐标系变了但是观察位置没有变,那么x值需要翻转(如果摄像机位置恰当改变了那么则不需要)。

拓展坐标系存在和转换的本质:

左右手坐标系的本质是十字三维坐标系中6 * 4 * 2=48种坐标系中的因为叉乘定义的不同而得到的左手24种坐标系和右手的24中坐标系。二维中4 * 2 =8种因为可以从反面旋转平面的,所以可以用一种标准的笛卡尔十字坐标系来表示。3维中,因为不存在更多的一维来观察旋转了,所以不管怎么翻转旋转,都会得到两种不同的坐标体系,不进行强制调转式的变化(非规律旋转)那么是不可能从一个坐标系变换到一个坐标系的,所以需要坐标体系之间变换需要进行强制性的调转变换,例如z轴取反,z-y互换等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

左右手坐标系区别和联系 的相关文章

  • 无需源代码即可调试/绕过 BSOD

    你好 祝你有美好的一天 这里需要一些帮助 情况 我有一个不起眼的 DirectX 9 应用程序 名称和应用程序详细信息与问题无关 自某些驱动程序版本以来 它会导致所有 nvidia 卡 GeForce 8400GS 及更高版本 出现蓝屏死机
  • 如何找出真实屏幕刷新率(不是四舍五入的数字)

    根据微软的这篇文章 http support microsoft com kb 2006076 en us用户设置的屏幕刷新率可以 并且大部分是 小数 用户设置为 59Hz 但屏幕按照屏幕显示 60Hz 运行 但实际上是 59 94Hz 我
  • SlimDX:在 Visual Studio 2010 中无法看到 Direct3D 调试输出

    我已经安装了 2010 年 6 月的 SDK 在 DirectX 控制面板中启用调试运行时 将调试输出级别设置为最大 更多 启用非托管代码调试 结果 Direct3D 的调试输出丢失 但是 如果我从外部启动应用程序并使用 dbgview e
  • 如何使用 D3DPT_TRIANGLESTRIP 基元类型在 DirectX 中绘制两个分离的矩形

    我是 DirectX 新手 我正在尝试使用以下命令在一个场景中绘制两个矩形D3DPT TRIANGLESTRIP 一个矩形没问题 但两个矩形则完全不同 是的 我可以使用用 绘制的四个三角形来绘制它们D3DPT TRIANGLELIST原始类
  • 有多少百分比的 Windows 机器支持 OpenGL [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • DirectX:如何绘制平滑的 2D 水(基于粒子的水)

    我最近使用粒子 1000 1500 工作 使用斯托克斯方程 进行水模拟 但我的问题是我使用 IDXSprite 它只是使用蓝色纹理四边形 7x7 绘制粒子 看起来不太平滑 是否有任何方法或已知技术来绘制此类系统 使表面看起来光滑 并且水不应
  • 在 Windows 桌面上制作 3D 对象动画

    我需要在 Windows 桌面上绘制用户可以与之交互的 3D 对象 例如狗 并为其设置动画 用户交互假设点击 显示 不规则形状 对话框以供用户输入等 您知道实现这一目标的具体方法吗 我想我有几种选择 有什么建议吗 哪一种最好 最简单 WPF
  • 从四元数查看矩阵

    我目前正在构建自己的四元数相机 据我所知 您只需要一个四元数即可完全指定相机的方向 如果我错了 请纠正我 那么 我将如何创建视图矩阵 顺便说一下 我使用 C 作为编程语言 任何帮助 将不胜感激 首先是一些注意事项 您会在网络上和有关该主题的
  • directX 创建交换链

    在我的书中 我编写了创建交换链的代码 IDXGIDevice dxgiDevice 0 mD3dDevice gt QueryInterface uuidof IDXGIDevice void dxgiDevice IDXGIAdapter
  • 从注入的 DLL 中挂钩 DirectX EndScene

    我想绕道EndScene从任意 DirectX 9 应用程序创建一个小的覆盖层 例如 您可以使用 FRAPS 的帧计数器叠加层 该叠加层在激活时会显示在游戏中 我知道以下方法可以做到这一点 创建一个新的d3d9 dll 然后将其复制到游戏路
  • DirectX 与 VB.NET

    是否有一组有关 DirectX 9 或更高版本 的文档 其中显示了将 DirectX 9 或更高版本 与 VB NET 一起使用的对象 方法 属性 事件和示例代码 最新的 SDK 包含 C 的详细信息 而 Windows DiectX 图形
  • DirectX Release 构建可以通过 VS2010 运行,但不能运行 exe

    我已经通过 Google 访问 Stack Overflow 几年了 但到目前为止还没有询问 回答任何问题 所以就到这里吧 基本上 我有一个在 DirectX 11 中设置绘图模型和地形的 3D 渲染框架 一切正常 通过 Visual St
  • DX11 中的顶点缠绕顺序

    我试图用 dx11 绘制一个简单的正方形 但每个三角形的索引顺序决定了它是否显示 我在光栅化状态下将剔除模式设置为无 但它似乎没有改变任何东西 如果我将第一个三角形的顶点指定为 0 1 2 而不是 2 1 0 则该三角形不会显示 所以我的问
  • Direct3D 中的矩阵多阶

    关于在 Direct3D 中乘法矩阵以获得结果 我收到了两个相互矛盾的答案 教程确实规定从左到右相乘 这很好 但这不是我想象的方式 这是一个例子 OpenGL 从上到下阅读 GLRotatef 90 0f GLTranslatef 20 0
  • DirectX 11 ClearRenderTargetView 恢复透明缓冲区?

    我正在尝试创建一个使用 directx 进行绘制的窗口opaque上面的内容透明的视图 即桌面显示出来 使用 DirectX11 我尝试执行以下操作 但它并没有使背景透明 事实上 我输入的任何不透明度值都会给出完全相同的结果 我在做什么 f
  • 在 DirectX9 中使用 ASSIMP 加载 .obj 模型

    这是我第一次发帖 我对这个名为 ASSIMP 的 3d 模型加载库有这个问题 我正在尝试将其集成到示例 Direct3d9 应用程序中 但进展并不顺利 我是一名经验丰富的 C 程序员 因此帮助我不会太麻烦 所以我过去制作了几个 d3d9 应
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or
  • 使用普通画布/文本输出更新LayeredWindow

    有没有一种方法可以使用画布在表单上绘图 然后使用 updatelayeredwindow 这样表单就不可见 但文本可见 就像只显示文本的半透明表单一样 如果没有 那么有没有办法只用画布 opengl directx 制作某种半透明形式 我想
  • 现代 GPU 上的纹理更改(和其他状态更改)成本

    我正在编写一个基于场景图的图形引擎用于建模目的 我正在使用 XNA 4 在我读过的许多地方 渲染期间应该最小化纹理变化 和其他状态变化 因此我必须按材质等对图元进行排序 我在 XNA 4 中创建了一个小型测试应用程序 它使用单个纹理渲染数百
  • DirectX 照明

    你好 我有一个使用 directX10 和 C 的小游戏 然而 我开始使用 OBJ10 direct X 示例的 meshloader 来制作它 并且我刚刚在它的基础上进行构建 然而 我的物体虽然有颜色 但看上去都是纯黑色的 我知道这是因为

随机推荐

  • JS/jQuery添加和移除CSS样式

    有时候需要添加CSS样式和移除CSS样式 如添加display属性 设为隐藏 有时候需要移除display属性 一 jQuery移除CSS样式的两种方法 注意 当其中一种不支持时 就尝试另一种 show removeAttr style s
  • VC6.0向工程中添加文件和打开文件出错“"0x5003eaed"指令引用的"0x00000000"内存”解

    据说这个错误是因为和微软的其他软件相冲突了 下面就看看如何解决这个问题 第一步 下载一个FileTool插件 下载的地址 http download microsoft com download vc60ent s1 6 0 w9xnt4
  • 服务器远程桌面连接不上(远程桌面连接服务器之超级VPS管理器)

    有时候我们需要使用远程桌面连接来操作另外一台电脑 但最近有Win7系统用户反映 电脑开启了远程桌面连接功能后 无法连接到远程桌面 遇到这个问题该怎么办呢 下面就为大家介绍Win7系统连接不上远程桌面的解决方法 一般情况下 对Win7的远程连
  • Oracle 中只查到一条记录就返回

    使用 rownum 关键字 select from T SYS USER where rownum lt 1
  • E9流程节点表分析

    E9流程节点表分析 流程节点分析 流程节点分析 新建流程审批节点时节点信息会存储到数据库 SELECT FROM workflow nodebase 流程节点表 ISREJECT 0为不可以退回 1为可以退回 ISSTAR 1 为开始节点
  • ​什么是晶振?晶振是怎么制成的?晶振的内部结构,晶振的工作应用以及影响晶振频率相关的参数介绍

    什么是晶振 定义 晶振一般指石英晶体振荡器 也叫晶体振荡器 晶体振荡器是一种使用逆压电效应的电子振荡器电路 即当电场施加在某些材料上时 它会产生机械变形 因此 它利用压电材料的振动晶体的机械共振来产生具有非常精确频率的电信号 晶体振荡器具有
  • Spring的IOC原理[通俗解释一下]

    1 IoC理论的背景 我们都知道 在采用面向对象方法设计的软件系统中 它的底层实现都是由N个对象组成的 所有的对象通过彼此的合作 最终实现系统的业务逻辑 图1 软件系统中耦合的对象 如果我们打开机械式手表的后盖 就会看到与上面类似的情形 各
  • Power BI:切片器联动的一些问题

    问题1 联动切片器选中子项后父项未能显示全部 如下所示 切片器原始状态为 Province和City来源同一张表 当选中了City中的某一项时 变为 父项也发生了变化 但我们希望无论子项选择什么 父项应该始终显示全部 解决办法 City切片
  • javaweb本地启动很快,服务器上面启动特别慢

    在JVM环境中解决 打开 JAVA PATH jre lib security java security这个文件 找到下面的内容 securerandom source file dev urandom替换成 securerandom s
  • 卷麻了,00后测试用例写的比我还好,简直无地自容......

    经常看到无论是刚入职场的新人 还是工作了一段时间的老人 都会对编写测试用例感到困扰 例如 如何编写测试用例 作为一个测试新人 刚开始接触测试 对于怎么写测试用例很是头疼 无法接触需求 只能站在用户角度去做测试 但是这样情况会导致不能全方位测
  • python中深拷贝与浅拷贝的详细解释

    在Python中 当我们对一个对象进行拷贝时 有两种方式 浅拷贝和深拷贝 浅拷贝创建了一个新的对象 其中包含原始对象的引用 而深拷贝则创建了一个完全独立的新对象 其中包含原始对象所有数据的副本 这意味着在原始对象和拷贝对象之间进行更改时 浅
  • 小记 Java stream 中 peek()

    peek 函数 接受一个函数作为参数 这个函数会被应用到每个元素上 并将结果元素映射成一个新的元素 相比于类似 foreach 更类似于lambda中的map函数 map函数 接受一个函数作为参数 这个函数会被应用到每个元素上 并将返回值映
  • ElementUI的自定义模板

    ElementUI自定义模板的使用 前言 一 ElementUI的Input重要属性 二 使用步骤 1 上实例 转自Element官网 2 介绍几个重要参数方法 3 基于以上的介绍 做一个带提示的搜索输入框 总结 前言 ElementUI对
  • 一个java程序员4年4个工作的经历

    今天看到一个帖子说程序员怎么提升自己的技能 里面说了十多项 对自己感觉能有用的有以下几点 读书 读代码 读博客 写博客 回答别人的问题 参加一个开源项目 参加培训 研讨会 回答问题当中给自己的思考 一个毕业生 做java转正了4k 一个室友
  • 为什么要选择云原生数据库

    为什么要选择云原生数据库 前言 1 传统数据库 1 1 传统数据库概念 1 2 传统数据库优缺点 1 2 1 优点 1 2 2 缺点 2 云原生数据库 2 1 云原生数据库概念 2 2 云化代表未来 2 3 云原生数据库的优势 2 3 1
  • 【MATLAB】字符串的处理及矩阵的初步学习

    欢迎访问我的个人网站 reality2ideal xyz 内容在CSDN和个人网站上同步更新 字符串处理 字符串矩阵 gt gt ch 123456 qwerty ch 2 6 char 数组 123456 qwerty 字符串矩阵的列数要
  • 转载:R语言绘图—图形标题、坐标轴设置

    R语言绘图是通过函数命令及相应参数设置实现的 如plot x y plot为绘图函数命令 x y则是绘图参数 指定了绘图的数据向量 但这种最基本的绘图设置很难满足个性化绘图的要求 我们需要根据需要对图形元素进行设置 图形元素是各类图形的基本
  • 生成带干扰线的验证码

    import java awt Color import java awt Font import java awt Graphics2D import java awt Transparency import java awt image
  • vue吸顶导航栏_vue2组件系列第四十二节:NavBar 导航栏

    NavBar就是程序顶部的内容 相当于网站里的面包屑的作用 准备工作 创建一个页面 NavBar vue 在router js里配置NavBar页面的路由 path navbar name navbar component gt impor
  • 左右手坐标系区别和联系

    本文是分析 所谓的右手坐标系转换为左手坐标系需要的 z轴取反 x轴取反 或者改变摄像机位置 渲染绕序改变 其中的进一步的原因 参考文章 https msdn microsoft com en us library bb204853 28VS