2016-03-20 35 views
-2

私はOpenGLを初めてお使いになり、openGLのgluLookat関数に問題があります。私はglutウィンドウの左上隅に原点を設定しました。私はカメラを原点に置き、原点で作成している立体のキューブを見て、それを画面の中央に変換しようとしています。gluLookatを理解できません

int w = glutGet(GLUT_SCREEN_WIDTH); 
int h = glutGet(GLUT_SCREEN_HEIGHT); 
windowWidth = w * 2/3; 
windowHeight = h * 2/3; 

glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, windowWidth, windowHeight, 0, -1, 1); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    gluLookAt (0.0, 0.0, 0.0, windowWidth/2, windowHeight/2, 0.0, 0.0, 0.0, 1.0); //Placing camera at the origin. 

    glPushMatrix(); // Set current matrix on the stack 
     glTranslatef (windowWidth/2, windowHeight/2, 0.0); // Translating it to the center of the screen 
     glutSolidSphere(5, 20,20); // creating the solid cube of radius 5 
    glPopMatrix(); // Pop the old matrix without the transformations. 
    glFlush(); 

I am not able to view the solid cube on the screen. What is wrong with this piece of code. 
+0

これはCのようであり、C++ではありません。言語ごとにタグを追加しないでください。 – Olaf

+0

私の悪い!編集ありがとう:) –

答えて

2

orthoとlookAtのウィンドウサイズの使用は、特にあなた自身に誤解を招きます。オルソでは、ウィンドウのサイズを表示ボリュームにしたいと思うようですが、それは問題ありません。しかし、カメラの原点を窓の中心に向かって見たいのですが、実際には窓の中心に向かって見るのではなく、の点の半分と同じ距離にある点を探していますウィンドウ。これは実際にはあまり意味がありません。なぜなら、ウィンドウのサイズを変更すると、球が離れてウィンドウを広げたり、ウィンドウに近づいたりするためです。

ウィンドウのサイズが640 x 480であるとしましょう。つまり、球はカメラから400単位離れた(320, 240, 0)の中心に配置されます。だからあなたの遠い価値は、あなたの目的を見るためにはそれよりも少し高くする必要があります。


は、第六のパラメータは(zfar)が小さすぎるので、あなたの球が視聴ボリュームの外にもなります glOrthoに、「何が間違っ部」を答えるために。

gluLookAt呼び出しに問題はありません。ちょうど、私が言ったように、それはあなたが意図したものとは異なる何かをしています。

実際の問題はコードではなく、コードとOpenGL関数を理解していることです。そのため、ボリューム、正射影、透視投影、およびビューマトリックスを表示することをお勧めします。

また、現代のOpenGLを学び、古いOpenGL機能を完全に廃止することはありません。

関連する問題