我认为我的问题很简单,但我是 Opengl 的新手,我不知道该怎么做。
我正在尝试旋转金字塔(数字无关紧要),我想相对于 X 旋转,然后相对于 Y 轴旋转。
但是当我在 X 上旋转时,Y 轴也会旋转。然后当我想相对于 Y 旋转时,Y 轴不再是原来的。
下图显示了 mi 金字塔在原点的星形:
然后相对于 X 旋转 win:
轴 Y 和 Z 也旋转,然后如果我想相对于 Y 旋转,则金字塔相对于旋转的 Y 轴旋转,而不是原始 Y 轴(强绿色)。
我使用 PushMatrix(); 和流行矩阵();:
gl.PushMatrix();
gl.Rotate(bx, 1.0f, 0.0f, 0.0f);
gl.PushMatrix();
gl.Rotate(by, 0.0f, 1.0f, 0.0f);
//Pyramid
gl.Begin(OpenGL.GL_TRIANGLES);
gl.Color(1.0f, 0.0f, 0.0f);
gl.Vertex(0.0f, 1.0f, 0.0f);
gl.Vertex(-1.0f, -1.0f, 1.0f);
gl.Vertex(1.0f, -1.0f, 1.0f);
gl.Color(0.0f, 1.0f, 0.0f);
gl.Vertex(0.0f, 1.0f, 0.0f);
gl.Vertex(1.0f, -1.0f, 1.0f);
gl.Vertex(1.0f, -1.0f, -1.0f);
gl.Color(0.0f, 0.0f, 1.0f);
gl.Vertex(0.0f, 1.0f, 0.0f);
gl.Vertex(1.0f, -1.0f, -1.0f);
gl.Vertex(-1.0f, -1.0f, -1.0f);
gl.Color(1.0f, 1.0f, 1.0f);
gl.Vertex(0.0f, 1.0f, 0.0f);
gl.Vertex(-1.0f, -1.0f, -1.0f);
gl.Vertex(-1.0f, -1.0f, 1.0f);
gl.End();
gl.PopMatrix();
gl.PopMatrix();
bx并在单击按钮时增加或减少角度(现在 Z 无关紧要)
好吧,我想相对于 X 和 Y 旋转金字塔,但原始轴(万向轴)独立于局部轴。
注意:我使用 SharpGL(用于 c# 的 OpenGL),但它是一样的。
更新
我改变我的代码:
gl.PushMatrix();
gl.Rotate(bx, 1.0f, 0.0f, 0.0f);
gl.PushMatrix();
//gl.Rotate(by, 0.0f, 1.0f, 0.0f); This changes
gl.Rotate(by, 0.0f, Math.Cos(bx*Math.PI / 180), -Math.Sin(bx*Math.PI / 180));
//Pyramid
gl.PopMatrix();
gl.PopMatrix();
我乘以矩阵 Rx inverse [1 0 0; 0 余弦;0 -Sin Cos] 由向量 Y [0 1 0] 得到,得到的向量 [0 Cos -Sin] 由 Y 旋转。
这可以按我的意愿工作,我按 X 旋转,然后按 Y 旋转,但是当我按 X 进行另一次旋转时,现在旋转是按 X 旋转而不是相对于原来的!!!,但是旋转由 Y 保持我想要的。
还有什么想法吗??太感谢了!!!