DirectX Graphics 프로그래밍 가이드 고정 기능 파이프라인 텍스처 기본적인 텍스처 처리의 개념 텍스처 어드레싱 모드 [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
Microsoft® Direct3D® 애플리케이션에서는, 어느 기본도형의 어느 정점에도 텍스처 좌표를 할당할 수가 있다. 더 자세한 정보는, 「텍스처 좌표」를 참조할것. 보통, 정점에 할당하는 텍스처 좌표 u 및 v 의 범위는, 0.0 으로 1.0 을 포함한 0.0 ~ 1.0 이다. 그러나, 이 범위외의 텍스처 좌표를 할당해, 특수한 텍스처 이펙트를 생성 할 수도 있다.
텍스처어드레싱모드를 설정하는 것으로,[0.0, 1.0] 의 범위외의 텍스처 좌표로 Direct3D 가 실시하는 처리를 제어할 수 있다. 예를 들어, 애플리케이션으로 텍스처어드레싱모드를 설정해, 기본도형 전체에 텍스처를 타일과 같이 칠 수가 있다. 다음 주제로 한층 더 자세하게 설명한다.
Direct3D 를 사용해, 애플리케이션에서는 텍스처 랩핑을 실행할 수 있다. 텍스처어드레싱모드를 D3DTADDRESS_WRAP 로 설정하는 것으로, 텍스처 랩핑을 실행하는 것으로는 같지 않기 때문에 주의 해야 한다. 텍스처어드레싱모드를 D3DTADDRESS_WRAP 로 설정 하면, 현재의 원시적으로 적용되는 전송원텍스처의 복사가 복수 생성된다. 텍스처 랩핑을 유효하게 하면, 텍스처 처리된 다각형을 시스템이 래스터 처리할 때 방법이 변경된다. 더 자세한 정보는, 「텍스처 랩핑」을 참조할것.
텍스처 랩핑을 유효하게 하면, 사실상 [0.0, 1.0] 의 범위외에 있는 텍스처 좌표를 무효로 할 수 있어 이러한 부적절한 텍스처 좌표의 래스터화의 동작을 미정도리로 할 수 있다. 텍스처 랩핑이 유효하게 되어 있으면 텍스처어드레싱모드는 사용되지 않는다. 텍스처 랩핑이 유효하게 되어 있는 경우에는, 애플리케이션으로 지정하는 텍스처 좌표가 0.0 보다 작아지거나 1.0 보다 커지지 않게 주의 해야 한다.
IDirect3DDevice9::SetSamplerState 메서드를 호출해, 각 텍스처 스테이지에 텍스처어드레싱모드를 설정할 수 있다. 제 1 인수에 목적의 텍스처 스테이지 식별자를 지정한다. 제 2 인수에 D3DSAMP_ADDRESSU, D3DSAMP_ADDRESSV, 또는 D3DSAMP_ADDRESSW 값을 설정해, u, v, 또는 w 어드레싱모드를 개별적으로 갱신한다. IDirect3DDevice9::SetSamplerState 에 건네주는 제 3 인수는, 설정되어 있는 모드를 판별한다. 이것에는,D3DTEXTUREADDRESS 열거형의 어느 멤버를 지정해도 상관없다. 텍스처 스테이지의 현재의 텍스처어드레싱모드를 얻어오려면,IDirect3DDevice9::GetSamplerState 를 호출해,D3DTEXTURESTAGESTATETYPE 열거의 D3DSAMP_ADDRESSU, D3DSAMP_ADDRESSV, 또는 D3DSAMP_ADDRESSW 멤버를 사용해, 정보의 취득 대상의 어드레싱모드를 식별한다.
일반적으로, 시스템에서는 0.0 ~ 1.0 (0.0 으로 1.0 을 포함한다)의 범위외에 있는 텍스처 좌표에서도 사용할 수 있지만, 많은 경우, 그 허용 범위는 하드웨어 제한에 의해 영향을 받는다. 장치 능력을 얻어온다와 렌더링 장치는 이 제한을 D3DCAPS9 구조체의 MaxTextureRepeat 멤버에 알린다. 이 멤버내의 값은, 장치로 사용 가능한 텍스처 좌표의 전범위를 나타낸다. 예를 들어, 이 값이 128 의 경우, 입력 텍스처 좌표는 -128. 0 ~ +128. 0 의 범위내에 없으면 안 된다. 이 범위외의 텍스처 좌표를 가지는 정점을 건네주면 무효가 된다. 자동 텍스처 좌표 생성 및 텍스처 좌표변화의 결과로서 생성된 텍스처 좌표에 대해서도, 이것과 같은 제한이 적용된다.
MaxTextureRepeat 의 해석도 D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 능력 비트에 의해 바뀐다. 이 비트를 설정 하면,D3DCAPS9 의 MaxTextureRepeat 멤버의 값이 정의대로 정확하게 사용된다. 다만, D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 가 설정되지 않은 경우는, 텍스처 반복 제한은, 텍스처 좌표에 의해 인덱스화 된 텍스처의 사이즈에 의존한다. 이 경우, 유효한 텍스처 좌표의 범위를 계산하기 위해서,MaxTextureRepeat 는, 현재의 텍스처 사이즈에 의해 최대 상세 레벨로 스케일링 될 필요가 있다. 예를 들어, 텍스처의 치수가 32 로,MaxTextureRepeat 값이 512 의 경우, 실제의 유효한 텍스처 좌표 범위는 512/32 = 16 이 된다. 따라서, 이 장치에서는 -16. 0 ~ +16. 0 의 범위내에 텍스처 좌표가 존재할 필요가 있다.
텍스처어드레싱모드의 더 자세한 정보는, 다음 주제를 참조할것.