Введение в программирование трехмерных игр с DX9

       

Создание текстур и разрешение текстурирования

Данные текстур обычно считываются из хранящихся на диске файлов изображений и загружаются в объект IDirect3DTexture9. Для этого используется следующая функция библиотеки D3DX:

HRESULT D3DXCreateTextureFromFile( LPDIRECT3DDEVICE9 pDevice, // устройство для создания текстуры LPCSTR pSrcFile, // имя файла с загружаемым изображением LPDIRECT3DTEXTURE9* ppTexture // указатель для возврата созданной текстуры );

Данная функция позволяет загружать изображения в форматах BMP, DDS, DIB, JPG, PNG и TGA.

Например, чтобы создать текстуру из изображения, хранящегося в файле с именем stonewall.bmp, следует использовать такой код:

IDirect3Dtexture9* _stonewall; D3DXCreateTextureFromFile(_device, "stonewall.bmp", &_stonewall);

Для установки текущей текстуры используется следующий метод:

HRESULT IDirect3DDevice9::SetTexture( DWORD Stage, // Значение в диапазоне 0-7, идентифицирующее // этап текстурирования (см. примечание ниже) IDirect3DBaseTexture9* pTexture // Указатель на устанавливаемую текстуру );

Вот пример использования данного метода:

Device->SetTexture(0, _stonewall);

ПРИМЕЧАНИЕ

В Direct3D вы можете устанавливать до восьми текстур, которые будут объединяться для получения более детализированного изображения. Этот процесс называется мультитекстурированием (multitexturing). В этой книге до четвертой части мы не будем пользоваться мультитекстурированием, и поэтому номер этапа текстурирования будет равен 0.

Чтобы запретить наложение текстуры на конкретном этапе текстурирования следует установить значение pTexture для соответствующего этапа равным 0.

Например, если мы не хотим использовать при отображении объекта текстуры, следует написать:

Device->SetTexture(0, 0); renderObjectWithoutTexture();

Если в нашей сцене присутствуют треугольники, для которых используются различные текстуры, код должен выглядеть похожим на приведенный ниже фрагмент:

Device->SetTexture(0, _tex0); drawTrisUsingTex0();

Device->SetTexture(0, _tex1); drawTrisUsingTex1();



Содержание раздела