最近完成した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);
これを解決する方法についてのアイデアはありますか?