OpenGL - 围绕特定轴旋转平面?

时间:2016-02-28 04:50:15

标签: c# opengl graphics opentk

我正在旋转这些顶点的平面合成,

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;

enter image description here

效果如上所示。但我宁愿飞机围绕它的左边缘旋转,这样黄色仍然固定在红色上。

模型矩阵按常规计算,

public Matrix4 GetModelMatrix()
{
    return Matrix4.Scale(Scale) * Matrix4.CreateRotationX(Rotation.X) * Matrix4.CreateRotationY(Rotation.Y) * Matrix4.CreateRotationZ(Rotation.Z) * Matrix4.CreateTranslation(Position);
}

除了修改X和Z位置外,我该如何实现?

1 个答案:

答案 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);