2010-06-26 7 views
4

복제를 위해 죄송합니다.하지만 몇 시간 동안 googlin '을 해본 결과 아무런 결과가 없었습니다. 내가 설정 한 텍스처를 가지고누군가 glDrawElements (iPhone)를 사용하는 방법을 설명 할 수 있습니까?

// 8 Verticies 
// 4 Texture Coordinates 
// 6 Normals 
// 12 Triangles 

static GLshort cubeFace_indicies[12][9] = { 
    // Box001 
    {2,0,3 ,0,0,0 ,0,1,2 }, {1,3,0 ,0,0,0 ,3,2,1 }, {5,4,7 ,1,1,1 ,1,3,0 }, 
    {6,7,4 ,1,1,1 ,2,0,3 }, {1,0,5 ,2,2,2 ,1,3,0 }, {4,5,0 ,2,2,2 ,2,0,3 }, 
    {3,1,7 ,3,3,3 ,1,3,0 }, {5,7,1 ,3,3,3 ,2,0,3 }, {2,3,6 ,4,4,4 ,1,3,0 }, 
    {7,6,3 ,4,4,4 ,2,0,3 }, {0,2,4 ,5,5,5 ,1,3,0 }, {6,4,2 ,5,5,5 ,2,0,3 } 
}; 
static GLfloat cubeVertices [8][3] = { 
    {-100.0f,-100.0f,-100.0f},{100.0f,-100.0f,-100.0f},{-100.0f,100.0f,-100.0f}, 
    {100.0f,100.0f,-100.0f},{-100.0f,-100.0f,100.0f},{100.0f,-100.0f,100.0f}, 
    {-100.0f,100.0f,100.0f},{100.0f,100.0f,100.0f} 
}; 
static GLfloat cubeNormals [6][3] = { 
    {0.0f,0.0f,1.0f},{0.0f,0.0f,-1.0f},{0.0f,1.0f,0.0f}, 
    {-1.0f,0.0f,0.0f},{0.0f,-1.0f,0.0f},{1.0f,0.0f,0.0f} 
}; 
static GLfloat cubeTextures [4][2] = { 
    {1.0f,2.0f},{1.0f,1.0f},{0.0f,2.0f}, 
    {0.0f,1.0f} 
}; 

, 나는 화면에 뭔가를보고 싶어 :

나는 컨버터에서 내 보낸 간단한 큐브의이 (최적화) 데이터를 가지고있다. 아래 내 최근 그리기 코드 :

glTexCoordPointer(2, GL_FLOAT, 0, cubeTextures); 
glVertexPointer(3, GL_FLOAT, 0, cubeVertices); 
glNormalPointer(GL_FLOAT, 0, cubeNormals); 
glBindTexture(GL_TEXTURE_2D, textures[0]); 

    glDrawElements(GL_TRIANGLES , 12, GL_SHORT, cubeFace_indicies); 
+0

물론 작동하지 않습니다. – Geri

+0

glEnable()이 호출 한 내용은 무엇입니까? –

+0

glEnable (GL_TEXTURE_2D); glEnable (GL_BLEND); glEnable (GL_DEPTH_TEST); – Geri

답변

5

인덱스 데이터 OpenGL ES (및 일반 OpenGL)는 사용하는 방식대로 작동하지 않습니다. 위치, 보통 및 텍스처 좌표에 대한 정점마다 별도의 인덱스를 제공하는 대신 단일 인덱스 을 제공하고 OpenGL ES는 활성화 된 각 정점 어레이에서 요소를 취합니다. 즉, 현재 표현에서 만든 모든 정점 - 일반 - 텍 스코드 조합에 대해 별도의 인덱스가 필요하므로 데이터를 조금 복제해야 할 수 있습니다.

모델을 평면 음영으로 그릴 수있는 경우 (즉, 그리기 전에 glShadeModel(GL_FLAT) 호출) 고유 한 점을 지정하지 않고 도망 갈 수 있습니다. 이 경우 삼각형의 마지막 꼭지점의 법선이 전체 삼각형에 사용됩니다. 물론 이것은 색인의 신중한 주문이 필요합니다.

+0

감사합니다. 그러나 그것이 사실이라면 3D Exploring은 왜 이런 배열을 수출합니까? 그냥 이해할 수 없다. 어쨌든, 폴리 트란스는 당신이 묘사 한 방식대로 수출하며 물론 잘 작동합니다. – Geri

0

당신이 glEnableClientState (GL_VERTEX_ARRAY)와 GL_VERTEX_ARRAY 상태를 활성화 한 다음 glVertexPointer 각 꼭지점 만들어야합니다 glDrawArrays를 사용하기 (3, GL_FLOAT, 0)

+0

제목을 잘못 입력했습니다. 질문은 glDrawElements에 있으며 지금은 업데이트했습니다. – Geri