2014-09-05 3 views
0

저는 IBO가있는 VBO를 가지고 있는데, 예를 들어 두 번째 삼각형을 렌더링하고 다음 렌더링 단계에서 세 번째 삼각형을 렌더링하려고합니다. OpenGL은 VBO의 일부만 렌더링합니다.

나는 두 번째 삼각형 경악을 렌더링하는 올바른 방법이

glDrawArrays(GL_TRIANGLES, 
      3, // indexArray[3] is start 
      3); // take 3 indices (from index 3..5 --> second triangle) 

그것은 최초의 삼각형 잘 작동 전화를 생각합니다. 그러나 다른 삼각형을 렌더링하고자 할 때 VBO의 매개 변수가 올바르게 해석되지 않습니다. 내가 제대로 렌더링

glDrawElements(GL_TRIANGLES, VBO.length, GL_UNSIGNED_INT, 0); 

개체를 호출 할 때

내 VAO의 정의는이

glGenVertexArrays(1, out VAO); 
glBindVertexArray(VAO); 
glBindBuffer(GL_ARRAY_BUFFER, VBO.V_ID); 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, VBO.E_ID); 

glEnableVertexAttribArray(0); 
glVertexAttribPointer(0, 2, GL_FLOAT, false, 12 * sizeof(float), 0); 
glBindAttribLocation(shaderID, 0, "InUV"); 
glEnableVertexAttribArray(1); 
glVertexAttribPointer(1, 4, GL_FLOAT, true, 12 * sizeof(float), 2 * sizeof(float)); 
glBindAttribLocation(shaderID, 1, "InColor"); 
glEnableVertexAttribArray(2); 
glVertexAttribPointer(2, 3, GL_FLOAT, true, 12 * sizeof(float), 6 * sizeof(float)); 
glBindAttribLocation(shaderID, 2, "InNormal"); 
glEnableVertexAttribArray(3); 
glVertexAttribPointer(3, 3, GL_FLOAT, false, 12 * sizeof(float), 9 * sizeof(float)); 
glBindAttribLocation(shaderID, 3, "InVertex"); 

glBindVertexArray(0); 

것 같습니다.

잘못된 방법으로 glDrawArrays를 사용합니까? 또는 VBO의 한 특정 삼각형을 렌더링하는 다른 방법이 있습니까 ???

답변

3

glDrawElementsglDrawArraysglDrawArrays은 당신이해야 인덱스 버퍼 대신

무시, 다른 : 지정된 오프셋, 당신은 또한 제자리에서이 작업을 수행 할 수 있습니다

usigned int *NULLptr=0; 
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, (void*)(NULLptr+3)); 

메모를 (void*)(3*sizeof(unsigned int))