2010-07-16 4 views
1

2 개의 배열 (법선과 정점 중 하나)을 말하고 정점과 법선 사이에 삽입 된 인덱스 버퍼를 사용할 수있을 때 glDrawElements 메서드를 사용할 수 있습니까?인덱스가 정점과 법선에 적용된 glDrawElements

예 : 큐브

// 8 of vertex coords 
GLfloat vertices[] = {...}; 
// 6 of normal vectors 
GLfloat normals[] = {...}; 
// 48 of indices (even are vertex-indices, odd are normal-indices) 
GLubyte indices[] = {0,0,1,0,2,0,3,0, 
        0,1,3,1,4,1,5,1, 
        0,2,5,2,6,2,1,2, 
        1,3,6,3,7,3,2,3, 
        7,4,4,4,3,4,2,4, 
        4,5,7,5,6,5,5,5}; 
glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_NORMAL_ARRAY); 
glVertexPointer(3, GL_FLOAT, 0, vertices); 
glNormalPointer(3, GL_FLOAT, 0, normals); 
glDrawElements(GL_QUADS,...);//?see Question 
+0

[여러 인덱스로 렌더링 메쉬] 가능한 중복 (0120-555-003) –

답변

4

없음 렌더링은 glDrawElements()documentation 참조하십시오.

당신은 단지 하나 glInterleavedArrays를 통해 ( here 참조), (인덱스를 중첩되지 않을 경우) 인터리빙 된 데이터를 사용하여 '인터리빙'을 달성 할 수

:

float data[] = { v1, v2, v3, n1, n2, n3 .... }; 
glInterleavedArrays(GL_N3F_V3F, 0, data); 
glDrawElements(...); 

또는를 통해 :

float data[] = { v1, v2, v3, n1, n2, n3 }; 
glVertexPointer(3, GL_FLOAT, sizeof(float) * 3, data); 
glNormalPointer(3, GL_FLOAT, sizeof(float) * 3, data + sizeof(float) * 3); 
glDrawElements(...); 

당신이 볼 수있는 , glInterleavedArrays()은 설탕 주위에 glInterleavedArrays()과 친구들입니다.

+0

레코드의 경우 'glVertexPointer'와 'glNormalPointer'의 보폭은 '는'{v1, v2, v3, n1, n2, n3 ....} '으로 정의 된 데이터 벡터로'sizeof (float) * 6'이어야합니다. – AldurDisciple

관련 문제