2016-03-07 77 views
0

我想繪製一個矩形並應用紋理。該代碼從一本書我讀的是抄襲,我只是傳遞給C++(從Java),那就是:無法正確繪製使用glDrawElements

void draw(){ 
glEnableClientState(GL_VERTEX_ARRAY); 
glVertexPointer(2, GL_FLOAT, 4, vertices.data());//vertexSize is 4 

glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glTexCoordPointer(2, GL_FLOAT, 2, vertices.data() + 2); 

glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices.data()); 

glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
glDisableClientState(GL_VERTEX_ARRAY); 
} 

頂點是size 16一個std::vector和以下值: [-0.25,-0.25,0.0,0.25,0.25,-0.25,0.25,0.25,0.25,0.25,0.25,0.0,-0.25,0.25,0.0,0.0] 每4個浮點指定vertex coordtexture coord, 以及指數是size 6具有以下值的std::vector[0,1,2,2,3,0] 指定頂點陣列中的兩個三角形(具有紋理)。 這兩個數組總是在調用draw之前設置的。

問題是呈現的對象是不正確的,而不是一個矩形我有一個梯形旋轉。載體似乎是正確的,因爲我是新來的OpenGL,我不知道這個代碼出了什麼問題。

感謝您的關注。

--- EDITED --- OpenGL的矩陣設定權之前進入應用循環:

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

glClearColor(0.0, 1.0, 0.0, 1.0); 

glEnable(GL_TEXTURE_2D); 
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 

/*application loop, no more matrices use*/ 
+0

可能是因爲你的矩陣?我們能看到你在做什麼嗎? – fordcars

回答

4
glVertexPointer(2, GL_FLOAT, 4, vertices.data());//vertexSize is 4 

是的,有每個頂點4間浮動。但這不是第四個參數。它是從一個位置到另一個位置的字節數。那不是4;這是4 * sizeof(GLfloat)

另外:

glTexCoordPointer(2, GL_FLOAT, 2, vertices.data() + 2); 

這裏的第二個2也應該是4 * sizeof(GLfloat)。數組的字節跨度與位置和紋理座標相同。

+0

解決了,而改變原來的版本我刪除了'* 4',因爲他們使用了一個字節數組,然後轉換爲浮動,我要浪費更多的時間在此,謝謝! – user2542813