2011-11-12 21 views
2

このカメラのチュートリアルhttp://www.swiftless.com/tutorials/opengl/camera2.htmlを統合し、スカイボックスにカメラのセンタリングに問題がありました。以下、このコードを使用してOpenGLカメラの位置とスカイボックス

ボックス内に私のカメラを作る:「私はカメラに近いオブジェクトを変換しようとしてきたhttp://sidvind.com/wiki/Skybox_tutorial 、しかしdidnの:

void reshape(int w, int h) 
{ 
    glViewport(0, 0, (GLsizei) w, (GLsizei) h); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    if (w <= h) 
     glOrtho(-1.0, 1.0, -1.0*(GLfloat)h/(GLfloat)w, 
       1.0*(GLfloat)h/(GLfloat)w, -10.0, 10.0); 
    else 
     glOrtho(-1.0*(GLfloat)w/(GLfloat)h, 
       1.0*(GLfloat)w/(GLfloat)h, -1.0, 1.0, -10.0, 10.0); 
    glMatrixMode(GL_MODELVIEW); 
} 

は、スカイボックスを描画するために、私はこのチュートリアルに従っ私が期待した通りに働く。今私は何をする必要があるのか​​分かりません。

ありがとうございました。

答えて

2

最初に、再構成ハンドラに投影を適用しないでください。さもなければ、単純なことは不可能なように見えます(スカイボックスのように)。 2番目:スカイボックスを動作させるには、残りのシーンのレンダリングと同じように、同じ投影を使用する必要があります。変更する必要があるのは、modelviewを0に変換してもカメラの方向を保持することです。

これは、modelview行列の最後の列を(0,0,0,1)に設定することで実行できます。

これは、このようなあなたのレンダリングコードを作る:

void render_skybox() 
{ 

    push_modelview(); 
    set_modelview_column(3, 0, 0, 1); 
    draw_skybox(); 
    pop_modelview(); 

} 

void render() 
{ 
    set_viewport(); 
    set_projection(); 

    apply_camera_transform(); 

    render_skybox(); 
    render_scene(); 
} 
+0

だから何がリシェイプにする必要がありますか()?私は自分のディスプレイ()を追加して、自分が行っていることを見ることができます。 – user985351

+0

@ user985351:それを信じるかどうか、GLUTを使って、私は通常、形を変えません。代わりに、その情報を得るためにglutGet(GLUT_WINDOW_WIDTH)とglutGet(GLUT_WINDOW_HEIGHT)を表示します。 – datenwolf

関連する問題