的基向量计算方法.doc

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

189****6649 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档