2012-01-03 2 views
2

필자는 독학 (또는 그렇게 가르친) 학습의 일부로 텍스처 매핑 큐브를 렌더링하려고합니다.버텍스 인덱스와 텍스처 좌표를 함께 묶습니다.

나는, 하나 개의 배열로 정점 좌표와 텍스처 좌표 팩과 같이 this example 온라인으로 발견

Vertex Vertices[4] = { Vertex(Vector3f(-1.0f, -1.0f, 0.5773f), Vector2f(0.0f, 0.0f)), 
         Vertex(Vector3f(0.0f, -1.0f, -1.15475), Vector2f(0.5f, 0.0f)), 
         Vertex(Vector3f(1.0f, -1.0f, 0.5773f), Vector2f(1.0f, 0.0f)), 
         Vertex(Vector3f(0.0f, 1.0f, 0.0f),  Vector2f(0.5f, 1.0f)) }; 

내 생각은 피라미드 모양의 오브젝트 작동을하지만, 그것은을 위해 잘 작동하지 않습니다 내 큐브. 문제는 다른면과 공유되는 같은 정점에 대해 다른 텍스처 좌표를 사용해야한다는 것입니다.

이렇게 생각했는데, "오, 알아요! 대신 인덱스로 텍스처 좌표를 포장 할 것입니다!" 그리고 기쁘게 인덱스를 텍스처 좌표에 매핑하는 데이터 구조를 만들었지 만 이제는 걸림돌을 만났습니다. 인덱스는 GL_ELEMENT_ARRAY_BUFFER에 들어가야하고 텍스처 좌표는 GL_ARRAY_BUFFER으로 이동해야합니다.

이 데이터를 하나의 버퍼에 압축 할 수있는 방법이 없다는 뜻입니까? 색인 배열과 텍스쳐 좌표 배열을 두 개의 분리 된 구조로 나누어야합니까?

게다가, 이제는 버텍스 위치와 텍스처 좌표 사이에 1 : 1 매핑이 더 이상 존재하지 않는다는 것을 깨달았습니다 ... 어떻게하면 버텍스 쉐이더를 다시 쓰는지 모르겠습니다.

또는 자습서에서 (꼭지점 위치와 텍스처 좌표를 함께 묶어서) 필요한 방식으로 정점을 반복해야합니다.

인덱스와 꼭지점 위치를 구분하는 가장 기본적인 아이디어는 데이터 중복성을 줄이는 것이지만 지금은 텍스처를 사용하자 마자 중복성을 다시 추가해야한다고 생각했습니다.

답변

1

당신은 자신의 위치만으로 정점을 식별하는 일반적인 오해에 빠졌습니다. 하지만 꼭지점이 아닙니다.

실제로 정점은 모든 속성, 즉 위치, 보통, 텍스처 좌표의 전체 조합입니다. 따라서 텍스처 좌표가 다른 경우에는 매우 다른 정점이 있습니다. 자체 인덱스가 있습니다. 따라서 서로 다른 텍스처 좌표를 제외하고 위치, 법선 등의 데이터를 복제해야합니다.

+0

충분히 공정하게 ... 나는이 사실을 받아 들일 수있다. :) – mpen

관련 문제