1보다 크거나 0보다 작은 텍스처 좌표가 발생할 수있는 이유


11

나는 세션 texture mapping과 preparing to draw세션 에서 텍스트를 공부하고 있습니다 .

텍스처 래핑 매개 변수를 정의하십시오. 텍스처 좌표가 1.0보다 크거나 0.0보다 작을 때 발생하는 상황을 제어합니다.

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,wrap);  
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,wrap);  

wrap is :
GL_REPEAT : 변환 된 텍스처 좌표가 0.0보다 작거나 1.0보다 큰 경우이 패턴이 반복되도록 (즉, 랩 어라운드) 지정합니다.

GL_CLAMP : 패턴이 0.0 또는 1.0의 값에 "고착"되도록 지정합니다.

그러나 이러한 텍스처 좌표가 발생하는 이유는 무엇입니까?
예를 들어 사각형을 방금 그려서 이미지를 텍스처로 적용하고 싶다고 가정하면 그러한 좌표가 발생할 수 있습니까?

답변:


5

모든 텍스처가 메쉬 데이터에서 오는 텍스처 좌표를 사용하는 것은 아닙니다. 예를 들어, 투영 텍스처링 을 사용하면 월드를 텍스처 공간으로 변형 할 수 있습니다. 글쎄, 그 세계의 많은 부분이 텍스처의 [0, 1] 범위를 벗어납니다. 어떤 종류의 클램핑 모드가 없으면 문제가 발생합니다.


10

정확하게 질감을 반복합니다.

따라서 쿼드가 있고 텍스처 좌표가 0에서 1로 바뀌면 텍스처가 한 번 그려집니다. 좌표가 0에서 2로 이동하고 줄 바꿈이로 설정된 GL_REPEAT경우 텍스처가 두 번 그려집니다.

직접 시도해보십시오


좋아, @Panda Pajama와 같은 코드는 다음과 같습니다. float x0 = 0; // 이미지의 왼쪽 상단 float y0 = 0; float x1 = x0 + ImageWidth; // 이미지의 오른쪽 아래 모서리 float y1 = y0 + ImageHeight; glBegin (GL_TRIANGLE_STRIP); {glTexCoord2f (0, 1); glVertex2f (x0, y1); glTexCoord2f (0, 0); glVertex2f (x0, y0); glTexCoord2f (1, 1); glVertex2f (x1, y1); glTexCoord2f (1, 0); glVertex2f (x1, y0); } 간격 (0,1) 이상으로 텍스처 좌표가 발생할 가능성이 없습니까?
— Sepideh Abadpour

1
@ sepideh : 물론 아닙니다. 당신은 구체적으로 범위 [0, 1]에 텍스처 좌표를 유지했다. 당신이 이해하지 못하는 것은 당신이 있다는 것입니다 하지 않습니다 ; 당신은 그들에게 무엇이든 만들 수있었습니다. 또한 주석에 많은 코드를 게시하지 마십시오. 명확하게하려면 질문을 편집하십시오.
— Nicol Bolas

내 질문에 코드를 전달하는 것에 대한 안내에 감사드립니다. 명령에서 코드를 형식화하는 방법을 찾고 있었지만 찾을 수 없습니다 !!! 따라서 이러한 좌표를 만나는 것은 런타임 가능한 이벤트가 아닙니다. 텍스처를 반복하기 위해 프로그래머가 명확하게 지정합니다.
— Sepideh Abadpour

1
@sepideh "런타임 가능 이벤트가 아닌"은 무슨 뜻입니까? glTexCoord2f(0, 2);예를 들어 주석에서 코드를 변경하는 것이 좋습니다. 이것은 코드와 프로그램이 실행될 때 매우 구체적으로 정의 된 의미를 갖습니다. 이것이 보이면 프로그래머가 원하는 결과를 제공하기 때문에 의도적으로 수행 한 것입니다.
— 조셉 맨스필드

2
물론 @sepideh. OpenGL은 사용자가 제공 한 값을 사용합니다. 0에서 1 사이의 값을 지정하면 다른 것을 얻지 못합니다.
— 조셉 맨스필드

5

예,보다 크 1.0거나 작은 텍스처 좌표가 발생할 수 있습니다 0.0.

이것은 완전히로드 한 모델에 따라 다릅니다. 일반적으로 각 정점마다 위치, 법선 및 텍스처 좌표가 저장됩니다. 대부분의 메쉬 파일 형식에서 텍스처 좌표는 어떤 범위로도 제한되지 않습니다.

텍스처 를 반복하는 데 사용됩니다 . 예를 들어, 정점 쿼드 간의 텍스처 네 시간에 걸쳐, 텍스처 좌표는 것 0,0, 0,4, 4,0및 4,4. 질감 포장하지 않고, 각 텍스처 좌표와 4 회에 4 하위 표면을 표면을 분할 추가 정점을해야합니다 0,0, 0,1, 1,0, 1,1. 정점이 적을수록 렌더링 성능이 향상됩니다.

일반적으로 사용자가 반복 텍스처의 가장자리를 알아 차리는 것은 바람직하지 않습니다. 따라서 대부분의 경우 반복 텍스처를 타일링 할 수 있습니다. 즉, 오른쪽 가장자리는 왼쪽 가장자리로, 위쪽 가장자리는 아래쪽 가장자리로 매끄럽게 페이드됩니다. 이러한 방식으로, 전환은 매끄럽고 사용자가 잘 알지 못합니다.

더 발전된 관련 주제는 동일한 질감이 여러 번 반복되었다는 사실을 영리하게 모호하게하는 것입니다. 예를 들어 서로 다른 크기의 반복 텍스처, 예를 들어 벽 텍스처와 먼지 데칼을 혼합하는 것이 일반적인 기술입니다.


Without texture wrapping, you would need additional vertices to split the surface into 4 times 4 sub surfaces with each the texture coordinates 0,0, 0,1, 1,0, 1,1그것은 실제적인 설명입니다! 감사!
— Amit Tomar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.