坐标变换
图形学数学基础中,总能看见把(x,y,z,1)称为齐次坐标,而把(x,y,z)称为普通坐标,我觉得可能理解有问题,当然我对数学也知之甚少,希望一起讨论。首先我们必须清楚,何为“齐次”,从名字上来讲应该就是未知数次数相等的意思,齐次方程、齐次坐标应该都是这个意思。我们使用的3D坐标为(x,y,z),所有分量均为一次的,所以叫齐次坐标,依理4D坐标(x,y,z,w)也应该是齐次坐标。我觉得准确的说法应该是:把3D齐次坐标(x,y,z)增加一个一次分量w,变为4D齐次坐标(x,y,z,w)。实际上计算机图形学中将3D齐次坐标变为4D齐次坐标,纯粹是为了统一计算,明了表示,没什么其他。将定义在w=1平面上的所有点,定义为3D空间坐标的集合,而w=0时,因为x/w=0 == w(无穷)/1,所以w=0平面上的点经过仿射变换,其实就是w=1平面上无穷远处的点,定义为方向(向量)。所以严格来说(x,y,z,1)坐标为齐次坐标是错误的,很显然只有(x,y,z)(x,y,z,0)和(x,y,z,w)才是齐次的。
程序中一般都使用右手坐标系,比如3DSMAX MAYA等等,但DX标新立异弄了个跟OPENGL相反的左手坐标系。其实当我们可以自己编写VS那刻起,这个问题就不在是个问题,数学上来说,只要在两个坐标系中使用完全一样的世界矩阵,相机矩阵和投影矩阵就能得到一模一样的结果,以前之所以困惑是因为OPENGL的固定流水线的投影矩阵是将Z进行了负向嵌位,现在顶点变换开放了,随便怎么写都可以,完全可以实现一个非对称投影矩阵做特殊效果。
程序中一般都使用右手坐标系,比如3DSMAX MAYA等等,但DX标新立异弄了个跟OPENGL相反的左手坐标系。其实当我们可以自己编写VS那刻起,这个问题就不在是个问题,数学上来说,只要在两个坐标系中使用完全一样的世界矩阵,相机矩阵和投影矩阵就能得到一模一样的结果,以前之所以困惑是因为OPENGL的固定流水线的投影矩阵是将Z进行了负向嵌位,现在顶点变换开放了,随便怎么写都可以,完全可以实现一个非对称投影矩阵做特殊效果。