DirectX Graphics 프로그래밍 가이드 고정 기능 파이프라인 텍스처 텍스처 랩핑   [목차열람] [주소복사] [슬롯비우기]
텍스처 랩핑
 
Microsoft DirectX 9.0

텍스처 랩핑


간단하게 말하면, 텍스처 랩핑이란, Microsoft® Direct3D® 로 각 정점에 대해서 지정된 텍스처 좌표를 사용해, 텍스처 처리한 다각형을 래스터화할 때의 기본적인 방법을 변경하는 처리이다. 다각형의 래스터화중에, 시스템은 다각형의 각 정점의 텍스처 좌표의 사이를 보간 해, 다각형의 모든 픽셀에 사용하는 텍셀을 결정한다. 보통, 시스템은 텍스처를 2D 평면으로서 취급해, 텍스처내의 점 A 로부터 점 B 까지의 최단 경로를 잡는 것으로 새로운 텍셀을 보간 한다. 점 A 가 u, v 위치 좌표 (0.8, 0,1)로, 점 B 가 (0.1, 0.1)의 경우, 보간의 선은 다음의 그림과 같이 된다.

보간의 선

위의 그림에서는, AB 간의 최단 거리가 텍스처의 거의 중앙을 지나고 있다. u 또는 v 의 텍스처 좌표의 랩핑을 유효하게 하면, u 및 v 방향에서의 텍스처 좌표간의 최단 경로를 Direct3D 가 인식할 방법이 변화한다. 정의에서는, 0.0 으로 1.0 이 같은 위치 좌표를 차지하면 가정해, 텍스처 랩핑에 의해 래스터라이저가 텍스처 좌표간의 최단 경로를 잡는다. 마지막 비트는 취급하기 어렵지만, 다음과 같이 생각하면 알기 쉽다. 한방향의 텍스처 랩핑을 유효하게 하면, 시스템은 텍스처가 마치 원기둥(실린더)의 주위에 감겨 있는 것과 같게 텍스처를 취급한다. 예를 들어, 다음의 그림을 생각한다.

원기둥(실린더)

위의 그림는, u 방향의 랩핑에 의해, 시스템에 의한 텍스처 좌표의 보간 방법이 어떻게 변화하는지를 나타내고 있다. 이 예로 사용한 같은 점을, 정상적인 또는 휘감지 않은 텍스처에 사용하면 점 A 와 점 B 의 최단 거리가 텍스처가 중심으로 없는 것을 안다. 이 경우, 최단 거리는 0.0 으로 1.0 이 모두 위치하는 경계를 지나고 있다. v 방향의 랩핑도 마찬가지이다. 다만, 측면이 아래가 되어 있는 원기둥(실린더)의 주위에 텍스처가 감기고 있다. u 및 v 의 양방향의 랩핑의 경우는 한층 더 복잡하다. 이 경우는 원환체, 즉 도너츠를 상상 하면이야 있고.

텍스처 랩핑을 실제로 사용한 가장 일반적인 애플리케이션은, 환경 맵핑의 실행이다. 보통, 환경 맵핑으로 텍스처 처리한 개체는 매우 반사적이며, 장면(scene)의 개체의 주위에 이미지가 반영한다. 이것을 설명하기 위해(때문에), 사방이 벽에서 둘러싸인 방을 생각한다. 벽에는 각각 R, G, B, 및 Y 라고 하는 문자가 붙여 있어, 거기에 대응하는 적색, 녹색, 청색, 및 황색으로 칠해지고 있다. 이러한 단순한 방의 환경 맵핑이면, 다음과 같이 된다.

적색·녹색·청색·황색의 수직 방향의 스트라이프

이 방의 천정이, 4 면으로부터 되는 매우 반사하기 쉬운 기둥에서 유지되고 있다고 한다. 이 기둥에 환경 맵핑을 실행하는 것은 매우 간단하다. 그러나, 벽의 문자와 색이 기둥에 반사하고 있도록(듯이) 보이게 하는 것은 간단한 것은 아니다. 다음 그림은 윗쪽의 정점의 가까이의 텍스처 좌표를 적용한, 기둥의 와이어 프레임을 나타내고 있다. 랩핑이 이 텍스처의 엣지를 횡단하는 「연결고리」는, 점선으로 가리킨다.

직사각형과 직사각형을 2분하는 점선

u 방향으로 랩핑이 유효하게 되어 있으므로, 텍스처 처리한 기둥에는, 환경 맵핑으로부터의 색과 심볼이 올바르게 표시되고 있어 텍스처의 전면의 연결고리에서는, 래스터라이저가 텍스처 좌표간의 최단 경로를 올바르게 선택하고 있다 (u 좌표 0.0 으로 1.0 이 같은 위치를 차지한다고 하는 전제). 텍스처를 적용한 기둥은, 다음의 그림에 나타내게 된다.

적색, 녹색, 청색, 황색의 4 개의 부분으로 구성되는 직사각형

텍스처 랩핑이 유효하지 않은 경우, 래스터라이저는, 실물과 같이 반사한 이미지를 생성하기 위해서 필요한 방향으로 보간을 실시하지 않는다. 반대로, 기둥의 전면 부분에서는, u 좌표의 0.175 및 0.875 간의 텍셀이, 텍스처의 중심을 통과할 때 수평 방향으로 압축되어 랩 이펙트는 무너진다.

텍스처 랩핑의 사용법

텍스처 랩핑을 유효하게 하려면 , 다음 샘플 코드가 나타내듯이IDirect3DDevice9::SetRenderState 메서드를 호출한다.

d3dDevice->SetRenderState(D3DRS_WRAP0, D3DWRAPCOORD_0);

IDirect3DDevice9::SetRenderState 가 받는 제 1 인수는, 설정하는 렌더링 스테이트이다. 랩핑을 설정하는 텍스처 레벨을 지정하는 D3DRS_WRAP0 ~ D3DRS_WRAP7 의 열거값의 어느쪽이든을 지정한다. 제 2 인수에 D3DWRAPCOORD_0 ~ D3DWRAPCOORD_3 플래그를 지정해, 대응할 방향의 텍스처 랩핑을 유효하게 하는지, 이러한 플래그를 조합해 복수의 방향의 랩핑을 유효하게 한다. 플래그를 생략 하면, 대응할 방향에서의 텍스처 랩핑이 무효가 된다. 텍스처 좌표세트에 대해서 텍스처 랩핑을 무효로 하려면 , 대응하는 렌더링 스테이트의 값을 0 으로 설정한다.

텍스처 랩핑과 유사한 이름의 텍스처어드레싱모드를 혼동 하지 않는 것. 텍스처 랩핑은, 텍스처어드레싱의 전에 실행된다. 텍스처 랩핑에 [0.0, 1.0] 의 범위외의 텍스처 좌표가 포함되지 않게 하는 것. 이러한 좌표가 포함되어 있는 경우의 결과는 부정이다. 더 자세한 정보는, 「텍스처어드레싱모드」를 참조할것.

디스플레이스먼트 맵과 랩핑

디스플레이스먼트 맵은, 테설레이션 엔진에 의해 보간 된다. 테설레이션 엔진에서는 랩 모드를 지정할 수 없기 때문에, 디스플레이스먼트 맵을 사용해 텍스처 랩핑을 실행할 수 없다. 애플리케이션은, 강제적으로 보간을 실행하는 일련의 정점을 사용해 임의의 방향으로 랩핑 할 수가 있다. 또, 애플리케이션은 단순한 선형 보간에 의한 보간의 실행을 지정할 수 있다.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP