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


11

나는 세션 texture mappingpreparing 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,04,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.