C#+directX中,mesh对象的世界矩阵如何转换?怎样让mesh对象永远只沿着自己局部坐标系的正Z方向移动?
以飞机转弯的效果为例:飞机前进即移动,不论飞机的局部坐标系怎么旋转,都永远只能往自己局部坐标系的+Z方向移动。1、飞机先沿局部坐标系的Z轴旋转90度(侧倾姿态),2、再沿...
以飞机转弯的效果为例:
飞机前进即移动,不论飞机的局部坐标系怎么旋转,都永远只能往自己局部坐标系的+Z方向移动。
1、飞机先沿局部坐标系的Z轴旋转90度(侧倾姿态),
2、再沿局部坐标系的X轴顺时针旋转(拉伸机头),
3、沿Z轴逆时针旋转90度(恢复飞行姿态)
在绘制模型前用device.Transform.World设置世界矩阵的话,各矩阵如何计算?数学底子太烂研究矩阵几天了还是没眉目。
Device.Transform.World = Matrix.RotationX(angleX)*Matrix.RotationY(angleY)*Matrix.RotationZ(angleY)*Matrix.Translation(X,Y,Z)
旋转矩阵只有放在第一位的X轴是正确的效果,后面两个Y Z轴的旋转它只按世界坐标的YZ方向旋转(正确效果应该是旋转的话,永远只沿着自己的坐标系的各轴旋转);
Matrix.Translation(X,Y,Z)中直接赋值的话,(X,Y,Z)也是按着世界坐标的方向,正确效果应该是沿着局部坐标系的Z轴移动,想过应该可以通过前面的旋转角度计算出局部坐标系中Z方向在世界坐标系的位置,但不知道该怎么计算。求前辈们点拨。谢谢! 展开
飞机前进即移动,不论飞机的局部坐标系怎么旋转,都永远只能往自己局部坐标系的+Z方向移动。
1、飞机先沿局部坐标系的Z轴旋转90度(侧倾姿态),
2、再沿局部坐标系的X轴顺时针旋转(拉伸机头),
3、沿Z轴逆时针旋转90度(恢复飞行姿态)
在绘制模型前用device.Transform.World设置世界矩阵的话,各矩阵如何计算?数学底子太烂研究矩阵几天了还是没眉目。
Device.Transform.World = Matrix.RotationX(angleX)*Matrix.RotationY(angleY)*Matrix.RotationZ(angleY)*Matrix.Translation(X,Y,Z)
旋转矩阵只有放在第一位的X轴是正确的效果,后面两个Y Z轴的旋转它只按世界坐标的YZ方向旋转(正确效果应该是旋转的话,永远只沿着自己的坐标系的各轴旋转);
Matrix.Translation(X,Y,Z)中直接赋值的话,(X,Y,Z)也是按着世界坐标的方向,正确效果应该是沿着局部坐标系的Z轴移动,想过应该可以通过前面的旋转角度计算出局部坐标系中Z方向在世界坐标系的位置,但不知道该怎么计算。求前辈们点拨。谢谢! 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询