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

Автор: Алексей
WEB-сайт: http://daddy.mirgames.ru

Чтобы создать, такое приложение нужны исходники библиотеки DirectX, найти их можно тут www.delphi-jedi.org (www.crazyentertainment.net)

Создание приложения, использующее Direct3D, желательно разбить на несколько частей. Так будет проще и удобнее, иначе можно запутаться и наделать кучу ошибок.

Разбиваем наше приложение на такие части:

  • Инициализация.
  • Загрузка вершин.
  • Перерисовка окна.
  • Освобождение памяти.

1.Инициализация

Direct3D состоит из множества COM объектов. И для инициализации нам нужно создать главный объект, а потом устройство главного объекта. Через главный объект мы не можем рисовать, через него мы можем только узнать возможности видео карты и создать устройство. А вот через устройство мы рисуем, текстурируем и т.д.

2. Загрузка вершин

Это важная часть нашей программы. Для того чтобы нарисовать треугольник нужно указать для него три вершины. А вершина задается тремя координатами в пространстве плюс можно добавить еще цвет, текстурные координаты, но об этом позже. Сейчас нам нужно заполнить массив, в котором будут храниться вершины. Для этого нам понадобится новый тип данных и константа для определения FVF(Flexible Vertex Format) флага вершин в Direct3D. Еще нужно создать COM объект вершинного буфера и заполнять вершины. По вершинам строятся примитивы.

На рисунке показаны все возможные примитивы и в каком порядке для них нужно заполнять вершины.


Тип и константа из примера:

type
  TCUSTOMVERTEX = packed record
    X, Y, Z: Single;
    Color: DWORD;
  end;
const
  D3DFVF_CUSTOMVERTEX = D3DFVF_XYZ or D3DFVF_DIFFUSE;

При заполнении массива надо учитывать то что координаты X и Y не должны быть больше 1 и меньше –1, иначе вершина с такими координатами будет вне экрана.

3. Перерисовка окна

Здесь все довольно просто очищается экран потом рисуются все треугольники через функцию DrawPrimitive в которой надо задать какой примитив рисовать далее с какой вершины начинается он в вершинном буфере и какое количество этих примитивов. Рисовать желательно между вызовами функций BeginScene и EndScene. В конце нужно переключить буферы иначе ничего не увидим. Эти функции принадлежат объекту устроство.

4. Освобождение памяти.

Здесь все просто, в каждом созданном объекте есть функция _Release она удаляет объект и все. Главное в правильном порядке удалять объекты иначе будут ошибки по окончанию приложения.

И еще я в этом примере использовал стандартный компонент Delphi находящийся в разделе Additional. Его название ApplicationEvents. В нем я использовал только одно событие Onidle для перерисовки окна.

Хочу заметить что запускать программы использующие библиотеку Direct3D лучше отдельно от IDE через EXE'шник.

Не откомпилированный пример здесь

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