2012-06-22 42 views
0

我正在嘗試製作賽車遊戲,並且在屏幕上顯示多個視口時遇到問題。我希望在屏幕的右下角放置一個小型「迷你地圖」(這實際上是與主攝像機場景不同的視圖),但爲什麼,第二個視口不會出現,我所能看到的只是主相機的視圖。OpenGL上的多個視口

這裏如下我的代碼是:

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; 
    } 
+0

你在繪製第二個視口?我沒有看到任何實際繪製任何代碼的代碼。 – Tim

+0

去這裏,有一個可下載的ViewPort例子。 http://zavie.free.fr/opengl/index.html.en#viewports – trumpetlicks

+0

我沒有畫第二個視口,我只是改變相機的位置,所以它可以從上往上看地圖將看起來像一個小地圖(這就是我使用lookAt函數)。 – Imperian

回答

1

你需要開始使用glGetError

您的功能的左右參數混雜在一起。您將寬度傳遞爲2/2,右傳遞爲0。這會生成負寬度,因此會產生錯誤。你的身高也看起來很負面。

+1

您對glViewport的理解可能不正確,它是x,y,寬度,高度。不是左,右,上,下!雖然我認爲你的評估可能是正確的,因爲他們用自己的setViewport方法混淆了事情。 – trumpetlicks

+0

你說得對,我修正了這個問題。不過,它看起來像第二個視口調用只是使第一個視口消失,現在我所看到的只是第二個視口(另一個應該是黑色的屏幕區域)。 – Imperian

3

我沒有繪製第二個視口,我只是改變相機的位置,所以它可以從向上看地圖,它會看起來像一個小地圖(這就是我使用lookAt函數)。

我認爲你對opengl的工作原理有一些嚴重的誤解。只是改變gluLookAt不會做任何事情。如果您想以不同角度查看場景,則必須在更改視口後重新繪製整個場景。如果要顯示小地圖,則應正常繪製整個場景,將視口設置爲小地圖,設置高架相機,然後再次繪製整個場景。

+0

嗯,這解釋了很多... – Imperian

+0

我已經更改了我的代碼並更新了我的問題,但同樣的問題仍然存在,我只能看到一個視口。 – Imperian