C++ OpenGL中的多个视口和文本…可能是';照相机在哪里?

C++ OpenGL中的多个视口和文本…可能是';照相机在哪里?,c++,opengl,camera,viewport,C++,Opengl,Camera,Viewport,我必须有一个OpenGL程序使用两个视口。在其中的一个模型中,我必须有一个直升机模型,上面有一个工作的摄像机,可以绕着直升机旋转。在我决定进行视口分割之前,我让相机在模型上工作,因为它具有更高的优先级。另一个视口应该显示FPS计数器,但由于某些原因,我只能从特定角度查看文本 我的代码如下: //sets up the viewports void setView(int option) { glMatrixMode(GL_PROJECTION);

我必须有一个OpenGL程序使用两个视口。在其中的一个模型中,我必须有一个直升机模型,上面有一个工作的摄像机,可以绕着直升机旋转。在我决定进行视口分割之前,我让相机在模型上工作,因为它具有更高的优先级。另一个视口应该显示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();

任何帮助都将不胜感激。

听起来你真的想要一个HUD(请原谅我双重猜测你的意图)。渲染场景,然后在modelview和投影矩阵上执行glLoadIdentity。然后把你的手套装上。最后,为文本和渲染设置光栅位置。

myCam.updateLook()做什么?它调用gluLookAt函数并将注视点设置为切碎器的中心。它还处理相机的所有新定位。相机的位置由IJKL键修改。@Galipan:您爱上了SNAFU人一次又一次的教程:在渲染功能之外设置投影和视口。将该代码移到绘图代码中,事情就会变得显而易见。