比较关心的是具体如何计算,看了一点图形学3d坐标变换的书,不过现在看公式看得一头雾水,急需几道详细的例题来了解怎样计算。
请好心人帮忙给出下面两道题的解答过程(或者有类似问题的解答过程也可以)
1 物体obj在(10,10,10),camera在(0,0,50),camera看着obj
求camera lookat矩阵,并给出计算过程(请用数学方法推导,不要使用api) 2 obj1在(10,10,10)没旋转。obj2在(50,50,100),z轴旋转30度。
用矩阵方法计算obj1在obj2坐标系下的矩阵和坐标,并给出计算过程。矩阵最好用openGL方式(列优先)表示,如果是行优先请说明。
新人没积分,过两天积分多了一定补上,拜谢。
010
001 (是相机坐标系的不是世界坐标 )
也就是吧lookat 100
right * A转换为 010 求得 A
up 001因为开始相机的坐标为 位置为pos,移到原点求得T
T*A得到矩阵(实际上就是将相机移到世界坐标系重合),再将其它所有的物体也这样移动
look at矩阵会求了(纸面计算的结果一点也不像例题的答案,计算量很大,要不是用openGl验证了一下,我肯定认为自己算错了)。
关于第二题: 计算在新坐标系下的坐标,就是 M = Mrot(30, 0, 0, 1)*Mtrans(50,50,100)计算出这个变换矩阵M,
然后用M乘obj1的坐标(10,10,10,1)T吧。但是此处的:求obj1在obj2坐标系下的矩阵是什么意思?按照我现在的一点理解:一个矩阵是指一种变换。我不明白单独给定一个坐标系和一个点,这个点的矩阵是什么意思,这个矩阵是什么变换的矩阵?难道是在这个坐标系下,把坐标系原点移动到给定点的变换矩阵吗?如果是这样,只需要平移一下就可以了,不过原题里还涉及到旋转,只平移似乎还不对...
我表达的可能有点乱...
在这种情况下就是把obj1这个物体变换到以obj2为坐标中心的一个新的坐标系中.
请详细说一下吧。我刚才想了一下,我在2楼的思路似乎不对。
求obj1在obj2坐标系下的坐标:我现在的思路是这样:
1) 求矩阵M, M是把原坐标系变换到obj2坐标系的矩阵,过程是:M= Mrot(30, 0, 0, 1)*Mtrans(50,50,100) // 平移,旋转的顺序对吗?
2)因为:对ojb2坐标系下的一个点P有 M*P = P在原坐标系下的坐标; 那么,求P在新坐标系下坐标的方法就是 P乘以M的逆矩阵。 所以求obj1在obj2下的坐标就是:M的逆矩阵乘以obj1的坐标(10,10,10,1)T。
不过这样求逆矩阵太麻烦了,有更好的方法吗?对于另一个问题:“求obj1在ojb2坐标系下的矩阵”,还是不明白要求什么,能给出具体的计算过程吗?
D3DXMATRIX *pOut,
CONST D3DXVECTOR3 *pEye,
CONST D3DXVECTOR3 *pAt,
CONST D3DXVECTOR3 *pUp
);
xaxis.x yaxis.x zaxis.x 0
xaxis.y yaxis.y zaxis.y 0
xaxis.z yaxis.z zaxis.z 0
-dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) l
D3DXMATRIX * D3DXMatrixLookAtRH(
D3DXMATRIX *pOut,
CONST D3DXVECTOR3 *pEye,
CONST D3DXVECTOR3 *pAt,
CONST D3DXVECTOR3 *pUp
);
zaxis = normal(Eye - At)
xaxis = normal(cross(Up, zaxis))
yaxis = cross(zaxis, xaxis)
xaxis.x yaxis.x zaxis.x 0
xaxis.y yaxis.y zaxis.y 0
xaxis.z yaxis.z zaxis.z 0
-dot(xaxis, eye) -dot(yaxis, eye) -dot(zaxis, eye) l