Direct3D - Натягиваем текстуру
Автор: Алексей
WEB-сайт: http://daddy.mirgames.ru
Привет!!! Сегодня мы рассмотрим как работать с текстурой. Текстура бывает разная от двумерной до кубической, но в примере рассмотрим только двумерную. Двумерная текстура - это изображение накладываемое на поверхность треугольника словно обои приклеиваемые к стене. У всех текстур есть ограничения по задаваемому размеру. Он обязательно должен быть степенью двойки. На пример 128х256 годится, а 78х300 не годится. Для загрузки текстуры можно использовать готовую библиотеку D3DX8. В ней есть функция:
function D3DXCreateTextureFromFile(const Device: IDirect3DDevice8; const
pSrcFile: PWideChar; out ppTexture: IDirect3DTexture8): HResult; stdcall;
Так же нужно просто прописать объект текстуры:
Tex:iDirect3DTexture8;
Еще в типе вершины и константе нужно указать переменные отвечающие за координаты текстуры.
type
TCUSTOMVERTEX = packed record
X, Y, Z: Single;
U, V: Single;
end;
const
D3DFVF_CUSTOMVERTEX = D3DFVF_XYZ or D3DFVF_TEX1;
На рисунке можно увидеть наглядный пример текстурных координат.
Для наложения текстуры на треугольник нужно установить некоторые параметры. Для отображения текстуры на треугольнике нужно прописать эту строчку:
D3DD.SetTextureStageState(0, D3DTSS_COLOROP, D3DTA_TEXTURE);
В следующих примерах разберем зачем она нужна. А для билинейной фильтрации текстур пишем такие строки:
D3DD.SetTextureStageState(0,D3DTSS_MAGFILTER, D3DTEXF_LINEAR);
D3DD.SetTextureStageState(0,D3DTSS_MINFILTER, D3DTEXF_LINEAR);
Далее устанавливаем нужную текстуру и рисуем треугольники:
D3DD.SetTexture(0,Tex);
D3DD.DrawPrimitive(D3DPT_TRIANGLELIST, 0,2);
Для полного понимания лучше скачать пример.
Не откомпилированный пример тут
|