glTranslatef沿对角线移动,而不是在主轴上移动

glTranslatef moves diagonally instead of on major axes

本文关键字:移动 主轴 对角线 glTranslatef      更新时间:2023-10-16

我想在按键时在x轴上移动我的对象。但它看起来像是对角线移动(左右上下)这是我的代码:按键代码 :

switch(key)
{
case 'a':
x++;
break;
case 'b':
x--;
break;
}

在OpenGL部分:

glMatrixMode(GL_PROJECTION);    
glLoadIdentity();   
gluPerspective(30, 1 , 1 , 1000);   
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

gluLookAt(100, 100, 100, 0, 0, 0,  0, 1, 0);
glTranslatef(x;0,0);

为什么glTranslatef工作得那么奇怪,我该如何解决这个问题?谢谢。

你很可能在翻译之前轮换。这将旋转整个坐标空间,您的"沿 x 轴平移"实际上将完全不同。

将来,请确保平移、缩放,然后旋转。这样,每个转换都将执行您的预期操作,而不会被先前的转换所操纵。我建议你多研究一下矩阵、坐标空间和 OpenGL。

此外,glTranslatef和其他矩阵堆栈函数已被弃用。看看现代的OpenGL。

编辑:

gluLookAt 做一个旋转来面对看点。因此,涉及轮换。如果您不想要这个,请切换它们。此外,这不是您的完整代码,它缺少glMatrixMode调用。