2

2つのビューポートで動作するOpenGLプログラムが必要です。そのうちの1つでは、カメラが機能し、その周りをあらゆる方向に回転するヘリコプターのモデルが必要です。ビューポートを分割することを決定する前に、優先度が高いため、モデルでカメラを動作させました。もう一方のビューポートにはFPSカウンターが表示されるはずですが、何らかの理由で特定の角度からしかテキストを見ることができません。

私のコードは次のとおりです。

    //sets up the viewports
    void setView(int option)
    {
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();

        switch (option)
        {
            case 1: 
                glViewport(0,height-150,width,150);
                break;
            case 2:
                glViewport(0,0,width,height-150);
                break;
        }
        if(persp)
            gluPerspective(fovy, (GLfloat) width /(GLfloat) height , near, far);
        else
            glOrtho(left,right,bottom,top,-10,10);  

        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        myCam.updateLook();
    }

    void writeBitmapString(void *font, char *string)
    {  
       char *c;
       for (c = string; *c != '\0'; c++) glutBitmapCharacter(font, *c);
    } 

    //main draw function
    void display(void)
    {   
        //Text portion of the window
        setView(1);
        glColor3f(1.0, 0.0, 0.0);
        glRasterPos3f(0, 0, 0.0);
        writeBitmapString((void*)font, "Test text");
        glutSwapBuffers();

        //Viewport for heli
        setView(2);
        glEnable(GL_DEPTH_TEST);
        glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);                
        glPushMatrix();
    //....The rest is just the modelling stuff
    glPopMatrix(); // final pop clause
    glFlush();
    glutSwapBuffers();

どんな助けでも大歓迎です。

4

1 に答える 1

1

ここに HUD が必要なようですね (意図を二重に推測して申し訳ありません)。シーンをレンダリングしてから、モデルビューと投影マトリックスの両方で glLoadIdentity を実行します。次に、glOrtho をロードします。最後に、テキストとレンダリングのラスター位置を設定します。

于 2013-03-10T02:15:25.237 に答える