- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
不同基下的坐标变换
在3D中流水线中,在几何部分,主要就是从不同坐标系之间坐标变换,这里主要介绍坐标变换的理论。
记a1,a2,a3,b1,b2,b3是两个不同坐标系的基向量,他们之间的过渡矩阵为T。
即:
a1,a2,a3*T = b1,b2,b3
设点P在坐标系a1,a2,a3中的坐标为(x1,y1,z1),在b1,b2,b3中的坐标为(x2,y2,z2)。
则有:
a1,a2,a3*(x1,y1,z1) = b1,b2,b3*(x2,y2,z2) ? ? ? ? ? ? ? ? ? ? ? ?(注:(x1,y1,z1)代表转置)
-- ? ?a1,a2,a3*(x1,y1,z1) = a1,a2,a3*T*(x2,y2,z2) ? ? ? ? ? ? ? ? ? ?(这里的a1,a2,a3必然是可逆的矩阵)
-- ? ?(x1,y1,z1) = T*(x2,y2,z2) ? ? ? ?(这里的T也必然是可逆矩阵)
-- ? ?Inv(T)*(x1,y1,z1) = (x2,y2,z2) ? ? ? ? ? ? ? ?(Inv(T)代表T的逆矩阵)
上面的过程采用的是右手系,所以如果两个坐标系的过渡矩阵为T那么他们的坐标相差的就是Inv(T)。
而在DX中采用的是左手系,左手系和右手系就相差一个转置,所以上面的过程为:
T*a1,a2,a3 = b1,b2,b3
-- ? ?(x1,y1,z1)*Inv(T) = (x2,y2,z2)
在DX中,从Object Space--World Space--View Space--Clip Space,使用的D3DXMatrixXXX得到的Matrix都是Inv(T)这个矩阵,注意不是两个坐标系的过渡矩阵。
在进行两个坐标系之间的坐标变换的时候,只要找到那个过渡矩阵T就可以解决了。而求T主要就用
a1,a2,a3*T = b1,b2,b3这个公式。而通常在3D中两个坐标系的基向量都是标准正交基,所以他们相差的就是一个平移和旋转,注意是先平移,再旋转。
平移:将前一个坐标系的坐标原点移动到另一个坐标系的原点
旋转:当两个坐标系的原点对齐后,旋转移动过来的坐标系,使他们的x,y,z轴对齐
所以:
在右手系情况下是右乘基向量,T = 平移M*旋转M
在左手系情况下是左乘基向量,T = 旋转M*平移M
如果a1,a2,a3是单位基向量,即E矩阵。那么T = b1,b2,b3,而如果b1,b2,b3是标准正交基,则InvT = T。
这里举一个从World Space到View Space的变换过程(采用左手系)
World Space中的基向量为E。
Eye Position为(1,2,3)
Up向量为(1,0,0)
Right向量为(0,0,1)
Look向量为(0,1,0)
则有
|1, 0, 0| |0, 0, 1|
?Trotate*(a1,a2,a3) = Trotate * |0, 1, 0| = |1, 0, 0|?
|0, 0, 1| |0, 1, 0|
在上面这个等式中是不能包含平移矩阵的,因为向量之间是没有位置关系的,只有方向。
而平移矩阵 = |1, 0, 0, 0|
? ? ? |0, 1, 0, 0|
|0, 0, 1, 0|
|1, 2, 3, 1|
在3D中平移矩阵要在第四维来体现,所以这里的是4x4的矩阵。
T = 旋转矩阵*平移矩阵 = |0, 0, 1, 0|?? |1, 0, 0, 0|
? ? ? |1, 0, 0, 0|?* |0, 1, 0, 0| ?
|0, 1, 0, 0|? |0, 0, 1, 0|
|0, 0, 0, 1|? |1, 2, 3, 1| ? ? ?
Trotate是标准正交矩阵,所以Inv(Trotate) = Trotate
而平移矩阵他的逆矩阵是在原来的方向反着平移的矩阵,所以就是
Inv(平移矩阵) ?=? |1, 0, 0, 0|
? ? ? |0, 1, 0, 0|
|0, 0, 1, 0|
|-1, -2, -3, 1|
而Inv(T) = ?Inv( 旋转矩阵*平移矩阵?) = Inv(平移矩阵)*Inv( 旋转矩阵?)
? ? ? = |0, 1, 0, 0|
? |0, 0, 1, 0|
|1, 0, 0, 0|
|-3, -1, -2, 1|
验证:
World Space? * ?Inv(T) ? View Space
(1, 2, 3, 1) ? ?
文档评论(0)