C++ を使用して OpenGL 用の単純な Camera クラスを作成しようとしています。したがって、基本的には次の関数を使用します。
void setModelviewMatrix () {
float m[16];
Vector3 eVec(eye.x, eye.y, eye.z);
m[0]=u.x; m[4]=u.y; m[8]=u.z; m[12]=-eVec.dotProduct(u);
m[1]=v.x; m[5]=v.y; m[9]=v.z; m[13]=-eVec.dotProduct(v);
m[2]=n.x; m[6]=n.y; m[10]=n.z; m[14]=-eVec.dotProduct(n);
m[3]=0; m[7]=0; m[11]=0; m[15]=1.0;
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(m);
}
void set (Point3 newEye, Point3 newLook, Vector3 newUp) {
eye.set(newEye);
n.set(eye.x-newLook.x, eye.y-newLook.y, eye.z-newLook.z);
u.set(newUp.crossProduct(n));
n.normalize();
u.normalize();
v.set(n.crossProduct(u));
setModelviewMatrix();
}
void setShape (float vAng, float asp, float nearD, float farD) {
viewAngle = vAng;
aspect = asp;
nearDist = nearD;
farDist = farD;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(viewAngle, aspect, nearDist, farDist);
}
そのため、動作中の標準カメラ設定 (以下を参照) を新しいカメラ設定 (以下も参照) に置き換えてテストしました。私の観点からは、新しいセットアップは古いセットアップとまったく同じことを行います。しかし、それでも結果は異なります。新しいセットアップでは、以前に表示されていたオブジェクトではなく、真っ白な画面しか見えません。何故ですか?
古いカメラのセットアップ (動作中):
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-64/48.0, 64/48.0, -1.0, 1.0, 0.1, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(2.3, 1.3, 2, 0, 0.25, 0, 0, 1, 0);
新しいセットアップ (機能していません):
Point3 eye = Point3(2.3, 1.3, 2);
Point3 look = Point3(0, 0.25, 0);
Vector3 up = Vector3(0, 1, 0);
cam.setShape(30.0f, 64.0f/48.0f, 0.1f, 100.0f);
cam.set(eye, look, up);