0

レースカー ゲームを作成しようとしていますが、画面に複数のビューポートを表示する際に問題が発生しています。画面の右下隅に小さな「ミニマップ」(実際にはメインのカメラ シーンとは異なるビュー) を配置したいのですが、なぜか 2 番目のビューポートが表示されず、表示されるのはメインカメラの様子。

ここに私のコードがそのまま続きます:

    void mainRender() {
        updateState();

        setViewport(0, windowWidth, 0, windowHeight);
        setWindow();
        renderScene();


        setViewport(0, windowWidth, 0, windowHeight/2);
        renderScene();
        gluLookAt(0,88,0,
                  1 ,0 ,0,
                  0.0,1.0,0.0);



        Sleep(30);
    }

    void setWindow() {
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(45.0f,(GLfloat)windowWidth/(GLfloat)windowHeight,0.1f, 100.0f);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        gluLookAt(posX,posY + 0.025 * std::abs(sin(headPosAux*PI/180)),posZ,
        posX + sin(roty*PI/180),posY + 0.025 * std::abs(sin(headPosAux*PI/180)) + cos(rotx*PI/180),posZ -cos(roty*PI/180),
        0.0,1.0,0.0);

    }

    void setViewport(GLint left, GLint right, GLint bottom, GLint top){
        glViewport(left, bottom, right - left, top - bottom);
     }


    int main(int argc, char **argv) {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
        glutInitWindowSize(windowWidth,windowHeight);
        glutInitWindowPosition(windowXPos,windowYPos);

        /**
        Store main window id so that glui can send it redisplay events
        */
        mainWindowId = glutCreateWindow("TF");

        glutDisplayFunc(mainRender);

        glutReshapeFunc(onWindowReshape);

        /**
        Register keyboard events handlers
        */
        glutKeyboardFunc(onKeyDown);
        glutKeyboardUpFunc(onKeyUp);



        mainInit();

        glutMainLoop();

        return 0;
    }
4

2 に答える 2

3

2 番目のビューポートには描画しません。カメラの位置を変更するだけで、マップを上から見ることができ、ミニマップのように見えます (これが lookAt 関数を使用する目的です)。

opengl の仕組みについて深刻な誤解をしていると思います。gluLookAt を変更するだけでは何も起こりません。シーンを別の角度から見たい場合は、ビューポートを変更した後にシーン全体を再描画する必要があります。ミニマップを表示したい場合は、シーン全体を通常どおり描画し、ビューポートをミニマップに設定し、オーバーヘッド カメラを設定してから、シーン全体を再度描画する必要があります。

于 2012-06-22T18:31:26.633 に答える
1

の使用を開始する必要がありますglGetError

関数の左引数と右引数が混同されています。左を幅/2、右を0として渡しています。これは負の幅を生成しているため、エラーが発生します。身長もマイナスに見えます。

于 2012-06-22T18:14:05.223 に答える