我在3D世界中生成了一个基本的立方体。我可以在相机周围正确旋转,但是当我在旋转后翻译时,翻译不正确。 例如,如果我旋转90度并转换为Z轴,它将像在X轴上平移一样移动。
glLoadIdentity();
glRotatef(angle,0,1,0); //Rotate around the camera.
glTranslatef(movX,movY,movZ); //Translate after rotating around the camera.
glCallList(cubes[0]);
我需要一些帮助。此外,我尝试在旋转前进行平移,但旋转不在相机上。它位于立方体的边缘。
答案 0 :(得分:0)
请记住,在OpenGL中,转换应用于相机,而不是渲染的对象;所以你要观察你期望的变换的逆。
同样在OpenGL中,Y和Z轴被翻转(Y是垂直的),因此您观察到水平平移而不是垂直平移。
此外,由于物体绕Y旋转90度,X轴和Z轴相互替换(其中一个相反)。
答案 1 :(得分:0)
这些旋转和翻译调用是线性转换。这有一个精确的定义,但就我们的目的而言,它意味着您可以将变换表示为矩阵,并将其与点的坐标相乘以将变换应用于某个点。现在矩阵乘法不是可交换的,意味着AB!= BA。所有这一切都说,当你旋转,然后翻译它不同于翻译和旋转,我想你知道。但是当你翻译,旋转和翻译时,你可能会更难以理解你的实际行动。即使你在那里投入一些比例也更糟糕。因此,如果您认真学习OpenGL,我建议学习线性变换如何工作并维护自己的对象和相机矩阵。
learnopengl.org是一个优秀的网站,但它教你现代OpenGL,而不是你目前使用的。但是transformations和coordinate systems上的课程可能通常很有帮助,即使没有确切的代码供您遵循