我有和标题一样的问题 :/ 我的操作如下:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f, 0, -zoom);
glRotatef(yr*20+moveYr*20, 0.0f, 1.0f, 0.0f);
glRotatef(zr*20+moveZr*20, 1.0f, 0.0f, 0.0f);
//Here model render :/
在我的应用程序中,相机旋转而不是模型。:/
我有和标题一样的问题 :/ 我的操作如下:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f, 0, -zoom);
glRotatef(yr*20+moveYr*20, 0.0f, 1.0f, 0.0f);
glRotatef(zr*20+moveZr*20, 1.0f, 0.0f, 0.0f);
//Here model render :/
glTranslatef(0.0f, 0, -zoom);
glRotatef(yr*20+moveYr*20, 0.0f, 1.0f, 0.0f);
glRotatef(zr*20+moveZr*20, 1.0f, 0.0f, 0.0f);
//Here model render :/
您是否尝试围绕点(0, 0, -zoom)旋转您的模型?
通常,为了围绕某个点(x,y,z)进行旋转,您需要执行以下操作:
如果您要围绕点(0,0,zoom)旋转,则缺少第3步。因此,请在渲染模型之前添加此步骤:
glTranslatef(0.0f, 0, zoom); // translate back from origin
另一方面,如果你想绕原点(0,0,0)旋转模型,并沿z轴移动它,则需要在旋转后进行平移,如@nonVirtual所说。
在绘制其他对象之前不要忘记重置MODELVIEW矩阵。因此,整个序列应该是这样的:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
#if you want to rotate around (0, 0, -zoom):
glTranslatef(0.0f, 0, -zoom);
glRotatef(yr*20+moveYr*20, 0.0f, 1.0f, 0.0f);
glRotatef(zr*20+moveZr*20, 1.0f, 0.0f, 0.0f);
glTranslatef(0.0f, 0, zoom); // translate back from origin
#else if you want to rotate around (0, 0, 0):
glRotatef(yr*20+moveYr*20, 0.0f, 1.0f, 0.0f);
glRotatef(zr*20+moveZr*20, 1.0f, 0.0f, 0.0f);
glTranslatef(0.0f, 0, -zoom);
#endif
//Here model render :/
glLoadIdentity();
// translate/rotate for other objects if necessary
// draw other objects
在定义对象的变换时,您可以使用GL_MODELVIEW,而在转换视点时则可以使用GL_PROJECTION。
我认为这与你应用变换的顺序有关。尝试交换对glRotate
和glTranslate
的调用顺序。现在,您正在从原点向外移动它,然后围绕原点旋转,这将使物体看起来像是围绕相机轨道运动。如果您在物体仍在原点时旋转它,然后再移动它,它应该会给您想要的结果。希望能有所帮助。