Delphi DirectX 9: Делаем Bump Mapping.
Автор: Константин Дементьев
Для того чтобы сделать Бамп нам нужно:
1) Основная текстура!
2) DOT3 или Normal Map текстура для эмуляции рельефа!
DOT3 текстуру можно сделать с помощью фирменной утилиты от ATi: Normal Mapper (http://developer.amd.com/resources/archive/archived-tools/) или с помощью программы CrazyBump!
Мы возьмем текстуры из DirectX9 SDK.
Основная текстура:
Normal Map текстура:
Код бампа очень мал и прост:
var g_pd3dDevice: IDirect3dDevice9; BaseT: IDirect3dTexture9; BumpT: IDirect3dTexture9; begin // грузим текстуры d3dxCreateTextureFromFile(g_pd3dDevice, 'Путь к основной текстуре', BaseT); d3dxCreateTextureFromFile( g_pd3dDevice, 'Путь к normal или DOT3 текстуре', BumpT); //устанавливаем режимы для первого уровня g_pd3dDevice.SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 0 ); g_pd3dDevice.SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_DOTPRODUCT3); g_pd3dDevice.SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_TFACTOR); //накладываем основную текстуру на normal текстуру g_pd3dDevice.SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 0); g_pd3dDevice.SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_ADD); g_pd3dDevice.SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE); // основную текстуру устанавливаем не на первый уровень как обычно а на второй, // а normal текстуру на первый g_pd3dDevice.SetTexture( 0,BumpT); g_pd3dDevice.SetTexture( 1,BaseT); end;
Вот, что получилось.
Без Bump'а: