2012-05-05 2 views
0

VBO에 텍스처를 첨부하려면 어떻게합니까?LWJGL의 텍스처가있는 VBO

저는 colorBuffer로 작업 했었고 이제는 텍스처를 구현하고 싶습니다. 이 내 그리기 방법 : 전혀 아무것도 표시되지 않습니다

Color.white.bind(); 
glBindTexture(GL_TEXTURE_2D, texture.getTextureID()); 

glBindBuffer(GL_ARRAY_BUFFER, vboVertexHandle); 
glBufferData(GL_ARRAY_BUFFER, vertexData, GL_STATIC_DRAW); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 
glBindBuffer(GL_ARRAY_BUFFER, vboVertexHandle); 
glBufferData(GL_ARRAY_BUFFER, textureData, GL_STATIC_DRAW); 
glVertexPointer(vertexSize, GL_FLOAT, 0, 0L); 




glEnableClientState(GL_VERTEX_ARRAY); 
glTexCoordPointer(3, GL_FLOAT, 0, 0); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 

glDrawArrays(GL_QUADS, 0, amountOfVertices); 
glDisableClientState(GL_COLOR_ARRAY); 
glDisableClientState(GL_TEXTURE_COORD_ARRAY); 

. 텍스처가 올바르게 비난되고 즉각적인 모드로 작업하게됩니다. VBO에서 작동하게하려면 어떻게해야합니까?

답변

2

텍스처 좌표의 VBO가 texCoordPointer를 설정하는 동안 바인딩되지 않은 것처럼 보입니다. 명령 순서를 변경하면 효과가 있습니다. 또한 단일 VBO에서 texCoord 데이터로 버텍스를 오버라이드합니다. 가장 쉬운 솔루션은 각각에 대해 두 개의 별도 VBO가 있어야합니다.

glBindTexture(GL_TEXTURE_2D, texture.getTextureID()); 
// vertices 
glBindBuffer(GL_ARRAY_BUFFER, vboVertexHandle); 
glBufferData(GL_ARRAY_BUFFER, vertexData, GL_STATIC_DRAW); 
glVertexPointer(vertexSize, GL_FLOAT, 0, 0L); 
// texCoords 
glBindBuffer(GL_ARRAY_BUFFER, vboTexCoordHandle); 
glBufferData(GL_ARRAY_BUFFER, textureData, GL_STATIC_DRAW); 
glTexCoordPointer(3, GL_FLOAT, 0, 0); 
// unbind VBO 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 

glDrawArrays(GL_QUADS, 0, amountOfVertices); 

glDisableClientState(GL_COLOR_ARRAY); 
glDisableClientState(GL_TEXTURE_COORD_ARRAY); 

참고 : 일반적으로이 번 VBO 당보다 더 glBufferData를 호출하여 새로운 VBOs 각 프레임을 생성하고 싶지 않아요.

+0

아, 기본적으로 Texture Coordinates는 gfxcars 메모리에 버퍼링되는 정점의 또 다른 버퍼입니까? 그게 어때요, 정말 고마워요! 그리고 저는 또한 그것을 조금 더 이해합니다. – Frotty

+0

매번 BufferData를 호출하지 않고 VBO가 1 개 이상 움직이는 것을 어떻게 관리합니까? – Frotty