三维物体旋转的问题

cagain 2004-01-31 04:38:17
我用键盘驱动m_RotatePitch、m_RotateYaw、m_RotateRoll这三个变量,以实现控制飞机在三维场景中绕自身轴旋转的目地。单独对三个轴向的旋转控制是没有问题的。但是,只要有一个轴向上发生了旋转,只要有一个轴向上发生了旋转,再对其他轴向旋转就会出现旋转轴不是物体自身轴向的状况。请问,是怎么回事呢?,相关代码如下:


D3DXMatrixRotationX(&matRotateX, m_RotatePitch); //俯仰角
D3DXMatrixRotationY(&matRotateY, m_RotateYaw); //偏航角
D3DXMatrixRotationZ(&matRotateZ, m_RotateRoll); //滚转角
...
D3DXMatrixMultiply(&matShip, &matRotateX, &matRotateY);
D3DXMatrixMultiply(&matShip, &matShip, &matRotateZ);

m_pD3DDevice->SetTransform(D3DTS_WORLD, &matShip);
...全文
113 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomb4 2004-02-01
  • 打赏
  • 举报
回复
首先要知道MATRIX连乘顺序
再,从object->world: V(o)->roll->yaw->pitch>trans->V(w)
如果是层次对象把world当成PARENT就行了,道理一样
GameWeaverDummy 2004-02-01
  • 打赏
  • 举报
回复
up
skull 2004-02-01
  • 打赏
  • 举报
回复
没法!Euler变换就这样。
我也遇到这个问题,目前还不知道是否有“标准”的解决方案。
要复合模型坐标系的旋转,只好每次复合前求出要复合的旋转的轴在新坐标下的位置,然后绕新轴旋转,而不是x,y,z单位轴。
cagain 2004-02-01
  • 打赏
  • 举报
回复
abcdefgh0000:

如果每帧都根据旋转角度重新生成一个物体的local axis,再对这个生成的axis旋转应该可以,但是这个功能DX应该提供吧。你知道有什么方法可绕自身旋转吗?或者DX提供有相应函数?
cagain 2004-02-01
  • 打赏
  • 举报
回复
D3DXQuaternionRotationYawPitchRoll(&m_pQ, m_RotateYaw,m_RotatePitch,m_RotateRoll);
D3DXMatrixRotationQuaternion(&matShip2, &m_pQ);

谢谢sakurar:
我用了上面的方法重写还是有同样问题,我想用复合变换可能和四元组的方法是一样的,应该是对轴向的处理上有顺序和角度的要求吧。
:(郁闷,大虾们快来呀!!!!!!!!!
abcdefgh0000 2004-02-01
  • 打赏
  • 举报
回复
D3DXMatrixRotation?(---, ---)是按世界坐标轴旋转? 不是按自身的轴进行旋转?
sakurar 2004-02-01
  • 打赏
  • 举报
回复
轴角方式进行复合变换得到的不是你预期的结果。
试试直接通过4D向量去变换。D3DXMatrixRotationQuaternion();

8,325

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧