DirectX 8 - Урок 6. Текстура
Я так увлекся экспериментами с вершинными шейдерами и с моделями, что совсем забыл об
одной из основ компьютерной графики - текстуре. Посмотрите внимательно на стену
в вашей комнате, что вы там видите? Правильно, обои (если они конечно есть :)).
Так вот текстура - это обои, наклееные на модель.
Рисунок 1. Куб с текстурой
Физически текстура - это 2-х мерное изображение, которое хранится в любом
графическом файле с расширением *.bmp, *.tga, *.jpg и т.д. Поэтому загрузит
текстуру в нашу программу очень легко, достаточно лишь вызвать следующую функцию:
int LoadTexture(void)
{
if(FAILED(D3DXCreateTextureFromFile(d3d_device,"Logo.bmp",
&d3d_texture)))
return 0;
else
return 1;
} |
Но тут нужно учесть одну особенность. Размерность изображения должна быть кратной
степени двойки, т.е. 2x2, 16x16, 256x256, 512x256 и т.д. Это связано с
некоторыми ограничениями Direct3D, в целях получения наибольшей производительности.
Для связи модели с текстурой, для каждой ее вершины, определяются так называемые
текстурные координаты. Эти координаты определяют положение вершины в пространстве текстуры.
Рисунок 2. Текстурные координаты
Чтобы текстурные координаты поступали в вершинный шейдер, надо их определит в разделе декларации вершинного шейдера:
:
DWORD v_shader_decl[] = {
D3DVSD_STREAM(0),
D3DVSD_REG(D3DVSDE_POSITION,D3DVSDT_FLOAT3),
D3DVSD_REG(D3DVSDE_NORMAL,D3DVSDT_FLOAT3),
D3DVSD_REG(D3DVSDE_TEXCOORD0,D3DVSDT_FLOAT2),
D3DVSD_END()
};
: |
А в самом шейдере эти координаты просто передаем для дальнейшей обработки:
Не забудьте в функции прорисовки сцены установить текущую текстуру для устройства
Direct3D, вызвав
d3d_device->SetTexture(0,d3d_texture); |
На этом пожалуй и все. Как видите сами, использовать текстуру в своей программе очень легко.
Исходный текст этой программы и exe-файл вы можете взять
здесь.
Взято с DirectX Design
|