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

C# OpenGL-围绕特定轴旋转平面?,c#,opengl,graphics,opentk,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; 效果如上图所示。

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

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)对齐,如下所示:


谢谢,伙计,将Z位置从1更改为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);