2016-02-28 159 views
1

我旋转这些顶点的平面复合材料,OpenGL - 围绕特定轴旋转平面?

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

飞机绕着它的局部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) 
}; 

或者,你可以把它翻译1个单元在Z轴,因此它会在原点对齐(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); 
+0

谢谢你,将Z位置从1更改为0可以校正偏移量。 –