2017-03-24 5 views
0

텍스처 좌표가 1보다 크고 0보다 작은 OBJ를 파싱 중입니다. 그런 다음 [0,1] 범위의 UV 값을 만들어 다시 작성합니다. another question on의 이해를 바탕으로 다음과 같이 범위 [0,1]로 변환하고 있습니다.범위를 벗어난 UV 값을 처리하는 동안 들쭉날쭉 한 라인 [0,1]

   if (oldU > 1.0) or (oldU < 0.0): 
        oldU = math.modf(oldU)[0] # Returns the floating part 
        if oldU < 0.0 : 
         oldU = 1 + oldU 

       if (oldV > 1.0) or (oldV < 0.0): 
        oldV = math.modf(oldV)[0] # Returns the floating part 
        if oldV < 0.0: 
         oldV = 1 + oldV 

는하지만 내 출력 OBJ 파일에 일부 들쭉날쭉 라인과 일부 소프트웨어 렌더링 원래 OBJ 파일을 참조 :

enter image description here [0,1]

에 제한 원래

enter image description here

답변

2

예상대로 작동하지 않을 수 있습니다.

U=0.9에서 시작하고 0.9에서 시작하지만, 그래서 삼각형이 텍스처의 다른 부분을 사용합니다 0.1에서 끝낼거야 클리핑 한 후 UV 후 U=1.1에서 끝 약간의 삼각형 모서리를 감안할 때. 나는 이것이 당신의 메쉬 바닥에서 일어난다 고 생각합니다.

일반적으로 0-1 범위 밖에서 UV를 사용하는 데는 문제가 없으므로 먼저 메쉬를 그대로 렌더링하고 문제가 있는지 확인하십시오.

UV를 0-1 범위로 옮기려면 정점 당 자르기 대신 UV를 비율 조정하고 이동하십시오. 모든 정점을 반복하고 U와 V의 최소값과 최대 값을 저장 한 다음 모든 vartex에 대해 UV를 스케일링하므로 min은 0이되고 최대 값은 1이됩니다.

+0

고맙습니다. 문제를 이해했지만 값을 조정하면이 문제를 해결할 수있는 방법을 아직 이해할 수 없습니까? 삼각형 모서리를 설명하는 방식이라면 0과 1 사이의 값을 지정하여 표현할 수 없습니다. 대신 새 삼각형이 모든 꼭지점을 갖도록 삼각형을 더 세분화해야합니다. 경계의 한쪽. 그러면 스케일링이 도움이 될 것입니다. 좀 더 설명해 주시겠습니까? –

+0

실제로 저는 텍스처를 스티치하여 아틀라스를 형성하고 있습니다. 그래서 나중에 GL_REPEAT를 활성화 할 수 없습니다. 내가 원하는 것은 모든 개별 텍스처가 UV를 [0,1]로 제한하고 반복을 필요로하지 않도록 함께 꿰매는 것입니다. –

+0

관련 항목 : http://stackoverflow.com/questions/662107/how-to-use-gl-repeat-to-repeat-only-a-selection-of-a-texture-atlas-opengl –