1
我正在從OGL直接模式遷移到VBO。我正在渲染四邊形,我的法線以即時模式工作。但我無法正常使用VBO正常工作。如何設置VBO四邊形法線
設置:
vertexData = BufferUtils.createFloatBuffer(12);
vertexData.put(new float[]{xCor[0], yCor[0], zCor[0],xCor[1], yCor[1], zCor[1],xCor[2], yCor[2], zCor[2],xCor[3], yCor[3], zCor[3]});
vertexData.flip();
texData = BufferUtils.createFloatBuffer(8);
texData.put(new float[]{tCor[0],tCor[1],tCor[2],tCor[3],tCor[4],tCor[5],tCor[6],tCor[7]});
texData.flip();
normalData = BufferUtils.createFloatBuffer(3);
normalData.put(new float[]{nCor[0],nCor[1],nCor[2]});
normalData.flip();
normalHandle = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, normalHandle);
glBufferData(GL_ARRAY_BUFFER, normalData, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
vboVertexHandle = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboVertexHandle);
glBufferData(GL_ARRAY_BUFFER, vertexData, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
vboTexHandle = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboTexHandle);
glBufferData(GL_ARRAY_BUFFER, texData, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
渲染:
glBindBuffer(GL_ARRAY_BUFFER, vboVertexHandle);
glVertexPointer(3, GL_FLOAT, 0, 0L);
glBindBuffer(GL_ARRAY_BUFFER, vboTexHandle);
glTexCoordPointer(2, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, normalHandle);
glNormalPointer(GL_FLOAT,0,0L);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glDrawArrays(GL_QUADS, 0, 4);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
在它的當前狀態,只亮起一出兩個三角形組成的四邊形。我可以看到爲什麼,但將緩衝區大小加倍並重復法向矢量座標並不能完全解決這個問題。一個人應該如何向一個四邊形的VBO輸入一個法向量,即兩個三角形?
感謝您的支持。把normalData緩衝區加到12,重複法線就行了。 – everling