|
先确认一下,D3D里的欧拉角用的是YXZ的旋转顺序是吧?即先拿Y旋转矩阵乘以X旋转矩阵,最后将结果乘以Z旋转矩阵.
如果是这样的话,那么我的代码就写对了
以下是我的2个测试结果:
结果1:
假如是YXZ的矩阵相乘顺序,则:
若X为90度,则Y和Z不论多少,最终都将在一个平面上旋转,
若Y为90度,则X和Z不论多少,都不会产生万向锁
结果2:
假如是XYZ的矩阵相乘顺序,则:
若X为90度,则Y和Z不论多少,都不会产生万向锁
若Y为90度,则X和Z不论多少,最终都将在一个平面上旋转,
(从上面两个结果可以感觉到,这东西实在复杂.)
问题1:如何理解XYZ和YXZ的不同几何意义?
问题2:假如是YXZ的矩阵相乘顺序,那么为什么X为90度时,Y和Z无论是多少,都在一个平面上旋转?
关于问题2:
我若拿现实的物体做旋转演示的话,和程序里计算的结果并不一样:
假设是一个木偶,它面向自己,并处于站立状态,
先让他绕X轴旋转90度,结果这木偶将是头部向后仰,直到完全躺在地上,然后我在让他绕Y轴旋转,那么他将沿侧面方向翻滚,而如果让他绕Z轴旋转,若Y为0度,则应该是在水平面上,做圆周旋转.可是程序里YXZ的相乘结果并不是这样,他的结果是,不论Y和Z是多少,这个木偶都将沿着侧面方向翻滚,这就是我的困惑所在.
另外,我拿这个木偶怎么旋转,都不会产生万向锁(比如先绕X旋转90度,然后通过改变Y和Z,我可以让木偶的头指向任何方向),而在程序里,却会产生万向锁.
不知道有没有朋友像我一样,对这个欧拉角旋转,对这个万向锁,对这个矩阵相乘顺序,有着类似的困惑?? |
|