2014-09-08 2 views
0

최근에 2D jpeg 이미지가 텍스처로 제공되는 Turbosquid에서 3D 삼각형 메쉬 (.obj 형식)가 다운로드되었습니다. 이 메쉬를 프로그램에서 사용하려고합니다. 처음에는 .obj 파일을 파싱 한 다음 텍스쳐와 메쉬를 렌더링하기 위해 코드를 처음부터 작성하고 있습니다.2 차원 jpeg 텍스처가있는 삼각형 메쉬에 대한 UVW 매핑

내 프로그램은 현재 대부분의 경우이 작업을 처리 할 수 ​​있지만이 특정 .obj 파일을 처리하는 방법을 모르는 몇 가지 문제가 있습니다.

1) UV 좌표가 [0,1] 범위에 없습니다. 0은 여전히 ​​최소값이지만 상한이없는 것 같습니다. 이것은 텍스처가 메쉬 주위에 여러 번 감싸는 것을 나타내는 것으로 가정하므로 각 좌표에 대해 십진수 값을 추출하여 사용하기로 결정했습니다. 각 I는 현재 다음과 같은 일을 해요 좌표 정도 :

double u = ReadInValue(); 
double v = ReadInValue(); 
u = u - (int)u; 
v = v - (int)v; 

은 그래서 자외선 COORD은 [1.35, 3.29]는 [0.35, 0.29]이된다. 적용 할 때 텍스처가 여전히 약간 보입니다. 이렇게해야 제대로 작동하는지 확실하지 않습니다.

2) 추가 W 좌표가 있습니다. 3D 체적 텍스처 파일을 다루는 경우 W 좌표는 UV 좌표와 동일한 방식으로 작동하고 단순히 3 차원에서 값을 조회하는 데 사용된다는 것을 알고 있습니다. 그러나 주어진 질감 파일은 입니다. 그래서이 여분의 W 좌표는 어떻게해야합니까? 나는 그것을 무시할 수 있습니까? W 용어로 UV 좌표를 나눌 필요가 있습니까 (마치 동질적인 좌표 인 것처럼). 어떻게해야할지 잘 모르겠습니다.

답변

0

1) 텍스처 좌표의 분수 부분 만 추출하여 작동 할 것으로 기대할 수 없습니다. 이것은 [1,1] 또는 [0,0]을 넘는 삼각형에 대해 중단됩니다. 예를 들어 정점 UVs [0,0]과 [5,5]가있는 선은 텍스처가 5 번 감싸는 것을 의미합니다. 그러나 계산에서 두 정점 모두 [0,0]이됩니다. GPU는 1.0보다 큰 UV 또는 네거티브를 사용하는 데 문제가 없으므로 갖고있는 것을 사용하십시오.

2) 우리는 모델에 정확히 무엇이 있는지 모릅니다. 3D 텍스처를 위해 3D 텍스처를 사용할 수 있지만 2D 텍스처가 있다고 말한 이후로 생각하지 않습니다. 나는 단지 u,v 좌표와 함께 첫 번째 대답을 사용하고 당신이 얻는 것을 볼 것을 제안 할 것입니다.

+0

1) 어떻게하면 "가지고있는 것을 사용합니까"? UV [5,5]를 그대로 [0,1] 범위로 변환하지 않고 어떻게 사용합니까? 4000 x 4000 픽셀의 텍스처를 가지고 있다면 [5,5]는 무엇에 해당합니까? [0,1]의 범위에 UV가있는 경우 좌표를 백분율로 생각할 수 있으므로 uv [0.5, 0.5]는 픽셀 x = 2000, y = 2000이됩니다. 분수 부분. – user1855952

+0

텍스쳐 공간을'[0,0] -> [1,1]'이 아닌 무한 공간으로 상상해보십시오. 삼각형은이 공간에 나란히 놓여 있습니다. 예를 들어, 모래 해변을 렌더링 할 때 큰 모래 텍스처가 필요하지 않습니다. 작은 '4x4/8x8' 텍스처를 사용할 수 있지만 좌표를 크게 설정하십시오 (예 : [0,0] -> [100,100]). 그래서 텍스처는 여러 번 반복됩니다. 텍스처 내용에 따라 모델에 동일한 내용이 적용될 수 있습니다. – kolenda