gluLookAt
一緒glFrustum
にレンダリングされた画像を歪ませているのではないかと思います。
シーンのレンダリング方法は次のとおりです。
そして、それをレンダリングしたコードがこれです。
InitCamera
一度呼び出され、今理解しているように、原点の2単位上、3単位前の位置から原点に向かって見たかのように、マトリックスを設定する必要があります。またglFrustum
、パースペクティブを作成するためにも使用されます`.
void InitCamera() {
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt (
0, 2 , 3,
0, 0 , 0,
0, 1 , - 0
);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum (- 1, 1,
- 1, 1,
1,1000.0);
glMatrixMode(GL_MODELVIEW);
}
次にTheScene
、実際に絵を描くのは次のとおりです。
void TheScene() {
glClear(
GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT
);
glMatrixMode(GL_MODELVIEW);
// Draw red circle around origin and radius 2 units:
glColor3d(1,0,0);
glBegin(GL_LINE_LOOP);
for (double i = 0; i<=2 * M_PI; i+=M_PI / 20.0) {
glVertex3d(std::sin(i) * 2.0, 0, std::cos(i) * 2.0);
}
glEnd();
// draw green sphere at origin:
glColor3d(0,1,0);
glutSolidSphere(0.2,128, 128);
// draw pink sphere a bit away
glPushMatrix();
glColor3d(1,0,1);
glTranslated(8, 3, -10);
glutSolidSphere(0.8, 128, 128);
glPopMatrix();
SwapBuffers(hDC_opengl);
}
赤いボールは、原点とその周囲の赤い円の中心に描画する必要があります。しかし、それを見ると奇妙な感じがし、緑色のボールがまったく中心にないような印象を受けます.
また、ピンクのボールは、楕円としてではなく、完全な円として描画する必要があります。
それで、私は間違っていますか、そして絵は正しく描かれていますか、それとも何か間違った設定をしていますか?