位置ベクトルとオイラー角のピッチとヨー (x と y 回転) で構成されるカメラを使用して、FPS スタイルのカメラを実装しました。射影行列を設定した後、回転させてカメラ座標に変換し、次にカメラ位置の逆に変換します。
// Load projection matrix
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// Set perspective
gluPerspective(m_fFOV, m_fWidth/m_fHeight, m_fNear, m_fFar);
// Load modelview matrix
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// Position camera
glRotatef(m_fRotateX, 1.0, 0.0, 0.0);
glRotatef(m_fRotateY, 0.0, 1.0, 0.0);
glTranslatef(-m_vPosition.x, -m_vPosition.y, -m_vPosition.z);
これで、それぞれ独自のカメラを備えたいくつかのビューポートがセットアップされました。すべてのカメラから、他のカメラの位置を (単純なボックスとして) レンダリングします。これらのカメラのビュー ベクトルも描画したいと思いますが、位置とオイラー角からルックアット ベクトルを計算する方法がわかりません。元のカメラ ベクトル (0, 0, -1) にカメラの回転を表す行列を乗算してから、変換されたベクトルにカメラの位置を追加しようとしましたが、まったく機能しません (ほとんどの場合、私がベースから離れた方法):
vector v1(0, 0, -1);
matrix m1 = matrix::IDENTITY;
m1.rotate(m_fRotateX, 0, 0);
m1.rotate(0, m_fRotateY, 0);
vector v2 = v1 * m1;
v2 = v2 + m_vPosition; // add camera position vector
glBegin(GL_LINES);
glVertex3fv(m_vPosition);
glVertex3fv(v2);
glEnd();
私が望むのは、カメラから視線方向に向かって線分を描くことです。この例をあちこち探しましたが、何も見つからないようです。
どうもありがとう!