앞 장에서 D3DTOP_MODULATE를 한 결과를 보면 실제로 밝아진다는 느낌보다 어두워진 느낌이 더 강할 것이다. 0.0~1.0사이의 값을 곱하면 값이 더 작아지기 때문이다.
엄밀히 말하면 라이트 맵이라기 보다는 지금하고 있는 예제나 앞장의 예제는 다크 맵이라고 해야할 것이다.

그럼 더 밝아지는 라이트 맵을 만들려면 어떻게 해야 할 것인가?
D3DTOP_MODULATE2X 연산을 하면 두 텍셀값을 곱한 결과에 2를 더 곱하기 때문에 더 밝아질것이다.
더 밝게 할려면 D3DTOP_MODULATE4X 연산을 하면 더 밝아질 것이다.

두 개의 픽셀 값을 섞는 식은 다음의 식이 이용된다.(이것봐도 아래식 렌더 상태 이해 안가네....)

OutputPixel = SourcePixelⓧSourceBlenddFactor + DestPixelⓧDestBlendFactor

각각의 변수는 4D 컬러 벡터 (r, g, b, a)이며 ⓧ기호는 성분 단위 곱을 나타낸다.

▣OutputPixel - 블랜드 결과 픽셀

▣SourcePixel - 후면 버퍼의 픽셀과 블렌드할 현재 픽셀

▣SourceBlendFactor - 블랜드할 원본 픽셀의 퍼센트를 지정하는 (0, 1)범위 내의 값

▣DestPixel - 후면 버퍼내의 픽셀

▣DestBlendFactor - 블렌드할 목적지 픽셀의 퍼센트를 지정하는 (0, 1)범위 내의 값

D3DCAPS9의 값중에 MaxSimultaneousTextures는 동시에 지원할 수 있는 멀티 텍스쳐의 갯수를 가리킨다.
동시에 지원할 수 텍스쳐의 갯수가 부족하다면 단일패스로 처리하면 된다.
대신 프레임이 저하 될 것이다.

멀티패스 멀티 텍스쳐 실행결과는 앞장의 단일패스 멀티 텍스쳐와 결과가 같다.

단일패스 멀티 텍스쳐와 비교해서

1) 버텍스 구조체 및 타입 선언
2) 버텍스 버퍼의 초기화.
3) 렌드링
4) 소멸

1, 2, 4 코드는 완전히 똑같다. 우리가 바꿀 부분은 3번 렌드링 코드이다.
전체 렌드링 코드를 보고 나서 애기하자,

멀티패스에서는 DrawPrimitive()를 2번 처리한다.
첫 번째 패스를 보자

D3DRS_ALPHABLENDENABLE로 알파블랜딩 모드를 켠다.
나머지 두라인은 알파 합성 디폴트 값으로 ON/OFF값이 바뀌지 않고 불투명의 다각형을 표시한다.

g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_ONE);
g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_ZERO);

두 번째 패스를 보자.


 

이해가 안가므로 블랜드 인수만 적어 놓겠다.(쉽게 이해시켜 주실분은 메일 주세요!!! bok@dreamwiz.com입니다.)

D3DBLEND_ZERO: 블렌드 인수=(0, 0, 0, 0)
D3DBLEND_SRCCOLOR: 블렌드 인수=(rs, gs, bs, as)

이해 못하고 넘어가면 찜찜하단 말이야. 화장실에서 나올 때 뒷처리 안한 느낌이 들어...