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

OpenGL - Rotating a plane around a specific axis?

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

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位置外,还有什么方法可以实现?

平面围绕其局部 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);