我正在旋转这些顶点的平面合成,
Vector3[] VertexPositionData = new Vector3[]{
new Vector3( 0f, 0f, 1f),
new Vector3( 1f, 0f, 1f),
new Vector3( 1f, 1f, 1f),
new Vector3( 0f, 1f, 1f)
};
在它的y轴上:
Rotation.Y += (float)Math.PI / 4;
效果如上所示。但我宁愿飞机围绕它的左边缘旋转,这样黄色仍然固定在红色上。
模型矩阵按常规计算,
public Matrix4 GetModelMatrix()
{
return Matrix4.Scale(Scale) * Matrix4.CreateRotationX(Rotation.X) * Matrix4.CreateRotationY(Rotation.Y) * Matrix4.CreateRotationZ(Rotation.Z) * Matrix4.CreateTranslation(Position);
}
除了修改X和Z位置外,我该如何实现?
答案 0 :(得分:1)
平面围绕其局部Y轴旋转,如果希望平面围绕其左边缘旋转,则需要将其与Y轴对齐。在您的情况下,平面距离Z轴上的原点1个单位。
您可以像这样修改它的顶点:
Vector3[] VertexPositionData = new Vector3[]{
new Vector3( 0f, 0f, 0f),
new Vector3( 1f, 0f, 0f),
new Vector3( 1f, 1f, 0f),
new Vector3( 0f, 1f, 0f)
};
或者,您可以在Z轴上将其翻译为1个单位,以便它在原点(0,0,0)上对齐,如下所示:
Matrix4 result = Matrix4.Scale(Scale) * Matrix4.CreateTranslation(new Vector3(0, 0, -1)) * Matrix4.CreateRotationX(Rotation.X) * Matrix4.CreateRotationY(Rotation.Y) * Matrix4.CreateRotationZ(Rotation.Z) * Matrix4.CreateTranslation(Position);