ПрограммированиеПодсказкиГрафика

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'а:

Изображение

С Bump Mapping (Normal Map текстура):

Изображение

С Bump Mapping (DOT3 текстура):

Изображение

По возможности можно добавить specular environment map и luminance.

Скачать пример с исходниками можно здесь: Пример к подсказке Delphi DirectX 9: Делаем Bump Mapping.

Спасибо за внимание! Если вы что-то хотите узнать о програмировании графики на DirectX пишите мне в асю 582169137, или на мыло: или . Умею програмировать под все версии DirectX для Delphi и С++.

#bump mapping, #Delphi, #Direct3D

31 августа 2011 (Обновление: 28 сен 2013)

Комментарии [1]