我最近完成的 opengl 程序中有一个“相机”。但是,我注意到每当我旋转然后再次移动时,x、y 和 z 角度都会发生变化。例如,当我按下“w”键时,我沿着“z”轴向前移动。如果我然后将相机旋转 90 度,当我按下“W”键时,我实际上会向右移动,看似沿着“x”轴。为什么会发生这种情况是有道理的,我只是想知道为什么会发生这种情况。这是旋转功能:
private void camera() {
glRotatef(xrot, 1.0f, 0.0f, 0.0f);
glRotatef(yrot, 0.0f, 1.0f, 0.0f);
}
键盘功能:
if (Keyboard.isKeyDown(Keyboard.KEY_D)) {
xpos -= 0.035 * delta;
}
if (Keyboard.isKeyDown(Keyboard.KEY_A)) {
xpos += 0.035 * delta;
}
if (Keyboard.isKeyDown(Keyboard.KEY_W)) {
zpos += 0.03f * delta;
}
if (Keyboard.isKeyDown(Keyboard.KEY_S)) {
zpos -= 0.035 * delta;
}
if (Keyboard.isKeyDown(Keyboard.KEY_UP)) {
xrot += 0.035;
if (xrot > 360) {
xrot -= 360;
}
}
if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) {
xrot -= 0.035;
if (xrot > 360) {
xrot += 360;
}
}
if (Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) {
yrot += 0.035;
if (xrot > 360) {
xrot -= 360;
}
}
if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) {
yrot -= 0.035;
if (xrot > 360) {
xrot += 360;
}
}
还有我的翻译功能:
glTranslated(xpos, ypos, zpos - 30);
关于如何解决这个问题的任何想法?