平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0
数据加载中……

为什么会有右手坐标系和左手坐标系?

假设有两个几何体世界,它们的坐标系不同,分别为右手和左手坐标系,但两个世界有完全一样的物体,即两个世界的对应物体的三角顶点坐标都完全一样.然后在同样的方位上摆上一个摄像机,那成像场景是否一致?
起初从直觉上我怎么想,都觉得都应该是一样的,完全一样的物体坐标,完全一样的镜头位置,在每个孤立的坐标系统下都应该有一样的效果.但是原先以OpenGL坐标系构建的世界,在DirectX下我看到了一个奇幻的左右颠倒的世界.我在纸上画出两个坐标系,才发现原来真是这样,左手坐标系和右手坐标系本质上是两个左右颠倒的世界,而非以前所以为的Z正轴的朝向区别.

在实际的API中,无论OpenGL/DirectX都可以实现左右手坐标系.DX可以使用D3DXMatrixLookAtRH和D3DXMatrixPerspectiveFovRH来实现右手坐标系.OpenGL可以使用手动构建左手视图和投影矩阵来实现左手坐标系,毕竟左右手只是图形API中Transform的部分.

posted on 2007-06-24 21:59 linghuye 阅读(14214) 评论(10)  编辑 收藏 引用 所属分类: 3D图形学研究

评论

# re: 为什么会有右手坐标系和左手坐标系?  回复  更多评论   


感觉最初D3D用左手坐标系是微软的恶搞,故意展示它能标新立异。记得最初DirectX 3(应该是DX第一个版本,之前没有version 1和2 !?)里面充满了奇怪的东西,到了DirectX5才纠正了很多东西,走上正轨,但这种坐标系也无法改变了。


前一阵恰好看见Peter Shirley(他主要研究光线追踪)也写过一片类似的blog:
http://psgraphics.blogspot.com/2007/02/left-and-right-handed-coordinate.html

(可能要代理看,感谢党)

2007-06-27 16:58 | count0

# re: 为什么会有右手坐标系和左手坐标系?  回复  更多评论   


忘记一点了。

仅仅用D3DXMatrixLookAtRH和D3DXMatrixPerspectiveFovRH来实现右手坐标系还不够,你传入的数据还有关系。

我感觉比较好的方法是<3D Game Engine Design>(记得你买了第二版)的Wild Magic用的方法。


2007-06-27 17:05 | count0

# re: 为什么会有右手坐标系和左手坐标系?  回复  更多评论   

嗯,我的方法就是模仿<3D Game Engine Design>的做法,不过WildMagic按左手坐标系实现,而我习惯右手坐标系.
而且按之前的设计,传入的数据完全按右手坐标的习惯,所以测试没有问题.
2007-06-28 22:18 | linghuye

# re: 为什么会有右手坐标系和左手坐标系?  回复  更多评论   

WildMagic是右手坐标……它刚出来时,甚至只有opengl renderer。
2007-07-10 18:31 | count0

# re: 为什么会有右手坐标系和左手坐标系?  回复  更多评论   

标准不统一真烦
2007-07-11 13:26 | .net编程

# re: 为什么会有右手坐标系和左手坐标系?  回复  更多评论   

DX文档里面有说明,左手坐标系的一个好处是在正常视点下z值大部分为正,理解上稍微直观点罢了。这跟恶搞估计没关系,DX的图形处理部分在8.0动了大手术,也没把这个改回来,另一方面d3d里面坐标系并非不能转换。

左右颠倒和前后颠倒……似乎取决于你在什么方向上看啊,固定z轴的话……x轴当然是颠倒的。
2007-07-22 21:07 | 匆匆过客不能留言

# re: 为什么会有右手坐标系和左手坐标系?  回复  更多评论   

只要有博客就可以在8383.com免费申请.CN域名,输入域名就能直接进入博客,我刚申请了一个,快输入8383hosting.cn到我的博客看我是如何耍酷吧。
2007-08-13 17:05 | 8383

# re: 为什么会有右手坐标系和左手坐标系?  回复  更多评论   

什么是左,什么是右
2007-08-23 16:47 | 记名哈瓦

# re: 为什么会有右手坐标系和左手坐标系?  回复  更多评论   

不统一真麻烦
2007-09-20 14:14 | program

# re: 为什么会有右手坐标系和左手坐标系?  回复  更多评论   

左右手坐标系只是一种Assumption,就像将Vector看成是Row Vector还是Column Vector一样,就像将Matrix看成是Row Vectors还是Column Vectors一样,就像规定正的Angle Displacement是clockwise还是couterclockwise一样。。。无好坏之分,注意不同的Assumption下的转换即可。
2008-05-17 21:24 | soroman
只有注册用户登录后才能发表评论。