이번장에서는 텍스쳐의 사용 방법에 대해서 알아 본다.

 

이장에서 만들 프로그램의 그림부터 보자..  단일패스 멀티 텍스쳐링에 의한 라이트맵을 적용한 프로그램이다.
아래는 텍스쳐 연산과 그림과의 관계를 보여준다.

소스코드에는 들어가 있지 않지만 멀티텍스쳐를 사용할 수 있는지 체크 할려면 다음과 같이 하면된다.
엔진을 만들 때는 꼭 체크해서 처리해줘야 한다. MaxSimultaneousTextures 값은 그래픽 카드에서 동시에 처리할 수 있는 텍스쳐 수이다.

1. 라이트 맵

 

2. 알파 블랜딩 1

 

3. 알파 블랜딩 2

 

4. (단일 패스 멀티 텍스쳐링)라이트 맵 연습하기

12장의 기본 텍스쳐 순서에 따라 다음과 같다.

1) 버텍스 구조체 및 타입 선언

기본 텍스쳐 한 장 라이트 맵 텍스쳐 한 장 모두 두장의 텍스쳐가 필요하다.
그래서 UV좌표가 2개 선언되고 있고, 타입은 D3DFVF_TEX2를 사용해야 한다.
또, 텍스쳐 객체도 2개 정의한다.

2) 버텍스 버퍼의 초기화.

초기화 할 때, 기본텍스쳐를 로딩하고 라이트 맵 텍스쳐를 로딩한다.

3) 렌드링

D3DTA_TEXTURE: Direct3D는 입력으로 텍스쳐를 사용한다. 즉 Direct3D는 입력으로(SetTexture호출함으로써) 지정한 텍스쳐의 적당한 텍셀의 색상을 사용한다.

D3DTOP_SELECTARG1: 텍스쳐 스테이지의 첫 번째 입력을 변경하지 않고 출력으로 사용한다는 것을 알려준다.

D3DTA_CURRENT: Direct3D는 입력으로 전 단계 텍스쳐 스테이지의 출력을 사용한다.
만약 스테이지 0에 이것을 설정한다면 Direct3D는 D3DTA_DIFFUSE를 지정한 것처럼, 분산색을 사용한다. 만약 범프맵을 사용하고 있다면, 범프 매핑을 위해서 사용하는 텍스쳐 스테이지는 건너뛴다. 만약 세 번째 스테이지 입력으로 D3DTA_CURRENT를 지정하고 두 번째 범프맵을 지정한면, Direct3D 첫 스테이지으 출력을 세 번째 스테이지의 입력으로 쓰게 된다.

D3DTOP_MODULATE: 두 입력 색을 곱셈한다.

4) 소멸

텍스쳐 사용이 끝나면 제거한다.