디테일 매핑(Detail Mapping)

 관찰자에서 가까이 있는 표면에 디테일 수준을 첨가하기 위해서 멀티 텍스쳐를 사용할 수 있다. 예를 들어, 벽돌 벽이 있을 때 이 벽돌벽을 가까이 보면 벽돌 벽이 거칠 게 보이도록 하기를 원할 것이다. 이와 같은 효과를 얻기 위해서, 범프 매핑을 사용할 수 있다는 사실에 일단 신경을 쓰지 말아라. 디테일 맵과 범프 매핑은 같은 목적을 가진다.

디테일 매핑이 들어가게 되면 큰 텍스쳐를 사용한 것과 같은 효과를 낼 수 있다.
다이렉트 Input에 대해서는 자세하게 설명하지 않을 것이다.
키보드 사용방법만 설명 하겠다.

화살표 Up Key: 벽돌 오브젝트를 확대한다.
화살표 Down Key: 벽돌 오브젝트를 축소한다.
스페이스 Key: 디테일 매핑을 On/Off 토글한다.

                           

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

디테일 맵이 필요하기 때문에 2개의 텍스쳐가 필요하다.

하나는 베이스 맵이고 , 또 다른 하나는 디테일 맵이다.
g_z는 카메라의 위치 z축에서의 값이다.
g_bDetail은 디테일 매핑을 On/Off 값을 나타낸다.
g_bSpace는 스페이스키를 눌렀을 때 연속으로 눌려지지 않도록 한다.

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

텍스쳐에 대한 필터링 방법이다. 8.x과 9.x이 차이가 있다.

        //8.X에서 사용되는 옵션으로 예제에서 사용하고 있는 옵션이다.

        g_pd3dDevice->SetTextureStageState(0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);        
        g_pd3dDevice->SetTextureStageState(0, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
        g_pd3dDevice->SetTextureStageState(1, D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
        g_pd3dDevice->SetTextureStageState(1, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
        g_pd3dDevice->SetTextureStageState(0, D3DTSS_MIPFILTER, D3DTEXF_LINEAR);
        g_pd3dDevice->SetTextureStageState(1, D3DTSS_MIPFILTER, D3DTEXF_LINEAR);

        //9.X에서 사용되는 옵션이다.

        g_pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);   
        g_pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
        g_pd3dDevice->SetSamplerState(1, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
        g_pd3dDevice->SetSamplerState(1, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
        g_pd3dDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
        g_pd3dDevice->SetSamplerState(1, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

텍스쳐의 필터에 대한 설정을 한다.

MYVERTEX의 구조체 필드 du, dv값을 보면 10.0f이 들어간다. 베이스 텍스체에 디테일 텍스쳐가 10번 반복된다.

3) 렌드링

 

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

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

D3DTA_CURRENT: Direct3D는 입력으로 전 단계 텍스쳐 스테이지의 출력을 사용한다.

D3DTOP_MODULATE2X 연산을 하면 두 텍셀값을 곱한 결과에 2를 더 곱하기 때문에 더 밝아진다.

4) 소멸

g_pDetailMap을 해제한다.

출처: [펌]했는데 양심도 없이 자기 글인양 출처도 밝히지 않는다고 협박 당할까봐 지금 부터라도 출처를 명시하겠다.   

소스 http://monster3d.freeweb.hu/Tutorial/tutorial7.htm
Special EFFECTS Game Programming With DirectX(민 프레스)