2012-01-15 11 views
0

(OpenGL、GLUT、GLU、およびCを使用) Cで3Dゲームを作成しようとしていますが、カメラの動き、衝突の検出、私は最初のハードルで失敗しました。私はCでOpenGLで絶対位置を設定する

glutSolidCube (2.0); 

を使用していると私はtranformationsとスケールと回転について知っている私の長方形を作成するには、しかし、私は正確な位置に配置する方法を探しています。 XYZと3D空間があったとします。私は5,0,20に向けてカメラを持っていましたが、0,0,0に向かって(角をなして)見ると、5,2,10にキューブを配置し、次に-5、-2,20に配置したかったとします。これらの絶対的なポジションはどのように使用しますか?また、どのように私は絶対的なサイズを使用すると、私は-5と-2,20のサイズを20,5,10にしたかったと言います。私はOpenGLでこれをどのようにしますか?

答えて

0

あなたは、関数を使用する必要があります:

glTranslatef() 
glRotatef() 
glScalef() 

はまた、また、これらを学ぶ:

glPushMatrix() 
glPopMatrix() 

詳細はOpenGL referenceをお読みください。

+0

ああ、完璧。ありがとう。私はちょうどglTranslatefを使っていました。それはなぜうまくいかなかったのでしょうか、Translate3fは正しく見えます。ありがとう! – user1150512

+0

glTranslate3fもglRotate3fもありません。 – datenwolf

+0

おっと、私の間違い...多分私は 'glColor3f()'やそれに似たものと混乱しているかもしれません。 – 0605002

0

まずglutSolidCubeを忘れてしまいます。 GLUTはOpenGLの一部ではありませんが、それはちょっとした便利なライブラリです。

OpenGLの点、線、トランラングルのみの取引を理解する必要があります。シーンを維持するのではなく、単に点、線、三角形を描画するだけです。トポロジーの意味を一切持たない独自のものです。また、数学ライブラリではOpenGLを混同しないでください。関数glTranslate、glRotate、glScaleなどは純粋な遺産であり、現在のOpenGLバージョンから削除されています。言われて...

が、私は(角度でだから)0,0,0の方に見て、5,5,20にカメラを持っていたし、5でキューブを配置したかったと言う

2,10、次に-5、-2,20である。これらの絶対的なポジションはどのように使用しますか?また、どのように私は絶対的なサイズを使用すると、私は-5と-2,20のサイズを20,5,10にしたかったと言います。私はOpenGLでこれをどのようにしますか?

私はあなたがすでに(旧OpenGLの-1.1とGLUTをMANSた)知っているものと一緒に行くよ:

void draw() 
{ 
    /* Viewport and projection really should be set in the 
     drawing handler. They don't belong into the reshape. */ 
    glViewport(...); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    your_projection(); 


    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    gluLookAt(5, 5, 20, 0, 0, 0, 0, 1, 0); 

    glPushMatrix(); 
    glTranslatef(5, 2, 10); 
    draw_cube(); 
    glPopMatrix(); 

    glPushMatrix(); 
    glTranslatef(-5, -2, 20); 
    draw_cube(); 
    glPopMatrix(); 

    glPushMatrix(); 
    glTranslatef(-5, -2, 20); 
    glScalef(20, 5, 10); 
    draw_cube(); 
    glPopMatrix(); 
} 
関連する問題