OpenGL";照相机“;在错误的轴上偏航
我正在使用gluLookAt()设置“摄影机”的位置和方向OpenGL";照相机“;在错误的轴上偏航,opengl,lwjgl,vector-graphics,Opengl,Lwjgl,Vector Graphics,我正在使用gluLookAt()设置“摄影机”的位置和方向 GLU.gluLookAt(xPosition, yPosition, zPosition, xPosition + lx, yPosition, zPosition + lz 0, 1, 0); 我的lz和lx变量代表我的前向向量 lz = Math.cos(angle); lx = -Math.sin(angle); 当在3D世界中旋转时,我似乎正在围绕始终在我前面的轴旋转
GLU.gluLookAt(xPosition, yPosition, zPosition,
xPosition + lx, yPosition, zPosition + lz
0, 1, 0);
我的lz和lx变量代表我的前向向量
lz = Math.cos(angle);
lx = -Math.sin(angle);
当在3D世界中旋转时,我似乎正在围绕始终在我前面的轴旋转
我之所以知道这一点,是因为我的xPosition和yPosition变量保持不变,但当我靠近一个对象并转身时,我似乎会围绕它旋转
我知道我在这里使用的数学没有问题,因为我曾尝试使用过去项目中的代码,这些代码工作正常,但问题仍然存在
这就是我在渲染循环中所做的
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//draw scene from user perspective
glLoadIdentity();
GLU.gluLookAt(camera.getxPos(), camera.getyPos(), camera.getzPos(),
camera.getxPos()+camera.getLx(), camera.getyPos(), camera.getzPos()+p1.getLz(),
0, 1, 0);
glBegin(GL_QUADS);
glVertex3f(-dim, dim, 0);
glVertex3f(dim, dim, 0);
glVertex3f(dim, 0, 0);
glVertex3f(-dim, 0, 0);
glEnd();
pollInput();
camera.update();
我尝试渲染一个玩家坐标所在的框,得到了这个结果。摄像机似乎是从玩家坐标后面看的。用一个类比现在它就像一个第三人称游戏,它应该看起来像一个第一人称游戏
这里的小盒子是在摄影机坐标系中渲染的,为了提供一些透视效果,大盒子在前面
解决了
问题是,我最初调用gluLookAt()时,矩阵模式设置为GL_投影
在我将矩阵模式设置为GL_MODELVIEW之后,我删除了该行并将其移动到。这解决了问题。请注意,您使用的是xPosition+lz。可能应该是xPosition+lx这只是问题上的一个输入错误,对不起,你是想绕着物体旋转相机吗?对象的位置是xPosition、yPosition、zPosition吗?如果是这样,您应该将xPosition+lx、yPosition、zPosition+lz作为前三个参数(眼睛位置),将xPosition、yPosition、zPosition作为嵌套参数(对象位置),“相机”偏航通过按“A”和“D”键、“A”向左偏航和“D”向右偏航来控制。我的问题是偏航轴似乎在相机前面。物体的位置是分开的,我可以选择看还是不看。lx和lz变量是使用偏航角度计算的,只是当我靠近一个物体并试图转动相机时,问题特别明显,因为偏航轴的位置在物体内部。无论如何,你使用的代码都非常过时;我建议切换到新版本;您需要自己创建所有矩阵,但问题很可能会消失。