Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
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);

Для полного понимания лучше скачать пример.

Не откомпилированный пример тут

Проект Delphi World © Выпуск 2002 - 2024
Автор проекта: USU Software
Вы можете выкупить этот проект.