2012-03-24 5 views
0

.obj 파면 파일을 파싱하여 3D 모델을 만드는 안드로이드 용 간단한 모델 뷰어를 작성했습니다. 나는이 형식으로 제공 믹서기에서 자외선지도 질감 된 간단한 icosphere을 수출하고 있습니다opengl es 2.0 텍스처 좌표

v 0.000000 -1.000000 0.000000 
v 0.723600 -0.447215 0.525720 
v -0.276385 -0.447215 0.850640 
. 
. 
. 
v -0.723600 0.447215 -0.525720 
v 0.276385 0.447215 -0.850640 
v 0.894425 0.447215 0.000000 
vt 0.238062 0.172144 
vt 0.314133 0.212645 
vt 0.264721 0.263452 
. 
. 
. 
vt 0.176955 0.098382 
vt 0.327646 0.115775 
vt 0.361262 0.040083 
f 103/1 15/2 48/3 
f 48/3 44/4 103/1 
f 13/5 103/1 44/4 
. 
. 
. 
f 47/12 105/8 46/10 
f 14/9 46/10 105/8 
f 105/8 47/12 15/2 

"V"는 "VT"는 텍스처 좌표를 나타내며, "F", 정점을 나타내는 얼굴을 나타냅니다 슬래시가 슬래시 앞에 오는 값은 정점에 해당하는 인덱스이고 슬래시 뒤에 오는 값은 텍스처 좌표에 해당하는 인덱스입니다. 내 문제는 텍스처 좌표가 일치하지 않기 때문에 현재 모델이 매우 이상하게 보일 정도로 OpenGL es에 텍스처 좌표 인덱스를 입력하는 방법을 잘 모르겠다는 것입니다.

enter image description here

답변

0

는 OBJ는 왼쪽 상단에있을 텍스처 내에서 원점을 정의합니다. OpenGL은 왼쪽 아래에 있음을 정의합니다. OBJ에서 오는 y 좌표를 반전시켜야합니다.

EDIT : 아래의 Christian Rau의 부분에 대해 내가 회의적으로 해석하고있는 것에 대한 응답으로 OpenGL의 목적을 위해 속성을 제한하고 실제로 사용하는 속성으로 제한하려면 정점은 위치와 텍스처 좌표의 조합입니다. 그것은 함께있는 두 가지입니다. 논리적으로는 별개라고 생각할 수도 있지만 OpenGL에서는 그렇지 않습니다. "OpenGL에 전달 된 목록의 OBJ 꼭지점이 23 번 항목에 있습니까?"라는 질문에 대답 할 수 있습니다. "정점 46/10"과 같은 대답으로

로드 할 때 Dictionary 서브 클래스 (예 : Hashtable)를 통해이를 구현하는 한 가지 방법입니다. 꼭지점 46/10를 사용할 필요가있을 때 적절한 합성 키를 만들고 OpenGL 배열 인덱스 위치로의 매핑을 위해 Hashtable을 확인하십시오. 하나를 찾지 못하면 다음으로 사용할 수있는 색인 위치를 할당하고 사전에 레코드를 저장하십시오.

그래서 다음은 질문에서 :

f 103/1 15/2 48/3 
f 48/3 44/4 103/1 
f 13/5 103/1 44/4 
. 
. 
. 
f 47/12 105/8 46/10 
f 14/9 46/10 105/8 
f 105/8 47/12 15/2 

그는 정점 1분의 103, 5분의 13, 3분의 48, 4분의 44, 15/2, 47 인 10 개 정점에 상승을 제공합니다/12, 105/8, 46/10, 14/9 및 46/10.

+0

그의 질문에있는 이미지가 방금 수직으로 뒤집힌 정확한 질감을 보여줍니다. –

+0

나는 낙천적이다. 텍스쳐 좌표는 질문 당 자동으로 풀려서 거꾸로되어 있어야한다고 생각할 이유가 없습니다. 당신이 분명히 회의 적이기 때문에 OpenGL 버텍스에 대한 토론을 추가 할 것이고 당신이 다른 질문에 대해 정말 좋은 대답을하는 것을 보았습니다. – Tommy