「カメラ」の位置と向きを設定するために 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 の世界で振り向くと、常に目の前にある軸を中心に回転しているように見えます
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();
プレーヤーの座標があるボックスをレンダリングしようとしましたが、この結果が得られました。カメラはプレイヤー座標の後ろから見ているように見えます。例えを使うと、今は 3 人称ゲームのようで、1 人称ゲームのように見えるはずです
ここの小さなボックスはカメラ座標でレンダリングされ、より大きなボックスが前面にある遠近感を与えます。