2012-03-26 34 views
0

我有幾個對象是通過三角形粉絲繪製的,但是一旦我設置了我的glVertexPointer並調用了glDrawArrays,我始終沒有指定至少顯式指定原點的一個點。以下是我如何繪製場景。 DrawScene函數被設置爲一個定時器,每30ms調用一次。glDrawArrays在原點繪製隨機點?

// initialize openGL scene 
    InitializeGL(){ 
    glViewport(0, 0, 800, 600); 
    glEnable(GL_MULTISAMPLE); 
    glClearDepth(1.0f); 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST); 
    glShadeModel(GL_FLAT); 
    glEnable(GL_DEPTH_TEST); 
    glEnable(GL_CULL_FACE); 
    glClearColor(0.0f,0.0f,0.0f,0.0f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    setUpView() // optional makes a call to glRotate() and glTranslate() in MODELVIEW matrix mode 

    drawAxis() //optional method to draw x,y,z axis 

    startDrawSceneTimer() // method that just starts the DrawScene timer to 30ms 

    } 


    DrawScene() 
    { 
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
     glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 
     glEnable(GL_VERTEX_ARRAY); 
     //poly2 is a 7 point sided polygon, array is pointX, pointY, pointZ of each vertex 
     GLfloat poly2 [21] ={ -761.805 , 0.0 , 165.184 , -750.39 , 0.0 , 160.456 , 
     -745.47 , 0.0 , 160.456 , -745.47 , 0.0 , 170.298 , -749.425 , 0.0 , 177.359 , 
     -755.31 , 0.0 , 180.141 , -765.155 , 0.0 , 177.421}; 
     glVertexPointer(3,GL_FLOAT,0,poly2); 
     glDrawArrays(GL_TRIANGLE_FAN,0,21); 
     glDisable(GL_VERTEX_ARRAY); 
    } 

在圖像的左下象限中只有一個多邊形,類似於六邊形。與起源的長期聯繫是異常現象。我的頂點「poly2」數組不包含頂點(0,0,0)。

這裏是我得到的圖像:

當我切換到GL_TRIANGLE_FAN GL_POINTS,在原點的點也繪製。在我的代碼中的其他地方找不到任何東西。我也嘗試刪除繪製x,y和z軸的代碼,但它沒有改變問題。

+0

發佈[SSCCE](http://sscce.org/)。 – genpfault 2012-03-26 15:55:46

+0

我不明白你的形象。它出什麼問題了?白色物體不應該在那裏嗎?或者是其他東西? – user1118321 2012-03-26 16:23:27

回答

4

您將錯誤的參數傳遞給glDrawArrays。最後一個參數不應該是數組中的浮點數,而應該是頂點數。由於您使用x,y,z頂點格式,因此應該傳遞21/3 = 。現在,函數調用將讀取數組的內存,這可能會導致您遇到的奇怪行爲。

見的例子如此:http://forums.toucharcade.com/showthread.php?p=497677