На главную страницу
  Программирование трехмерной графики
ВВЕДЕНИЕ: Этот проект посвящен программированию компьютерной трехмерной графики. В качестве языка программирования я использовал Delphi. Хотя C++ был бы точно не хуже, просто не хотелось загромождать все классами и наследованием.

Для работы вам понадобится Delphi (4,5 или 6). Модули JEDI для DirectX. Установленная библиотека DirectX7 или 8. Я указал где можно скачать необходимые инструменты (помимо Delphi) в первых главах документа.

На сегодняшний день у меня готова только первая часть. В ней рассказывается подробно только о том, как использовать и инициализировать DirectDraw в программах на Delphi, что такое WinAPI и как работают матрицы применительно к трехмерной графике.

Исходные коды+exe можно скачать здесь (222Kb).

Если вы хотите поделиться со мной информацией по текстурированию, рейтрейсингу, BSP-деревьям и т.д., то вы можете стать соавтором этого проекта. Я буду очень рад. Чтобы связаться со мной, зайдите на главную страницу - там все увидите.


Предисловие и планы на будущее
  Содержание
-- Введение
Часть 1.
1. Предисловие и планы на будущее.
2. Что понадобится для работы.
3. Немного про WinAPI.
4. Скелет программы.
5. Использование DirectX 7.
6. Опыт 1: "Звездное небо"
7. Матрицы и их применение. Основные арифметические операции над матрицами.
8. Опыт 2: используем матрицы для вращения куба.
9. В следующей главе:

Документ: Знакомство с программированием трехмерной графики. Часть первая.
Дата написания: 09.03.2002.

Автор: Прядкин Дмитрий (pryadkin@inbox.ru или 2:5010/207.3@FidoNet).

Примечание: Исходный код написан на Delphi 6 (думаю, также подойдет любая версия, начиная с четвертой). Помимо этого, используются конверсионные модули DirectX для Delphi от JEDI-project.

Соглашения об авторских правах: Все права по распространению и публикации документа остаются за мной. В особо сложных случаях, когда кто-то другой будет претендовать на авторство этого текста (или любой его части), я могу разрешить спор при помощи предъявления официального документа, закрепляющего за мной права авторства. Однако я считаю бессмысленными запреты на распространение документа. Поэтому каждый может распространять его на любых носителях, при условии сохранения первоначального вида данного документа.

Обратная связь: Если вам этот документ помог, то я буду рад услышать от вас отзыв. В равной степени я готов выслушать и положительные, и отрицательные точки зрения. Если вы планируете написать какую-либо игру, то я могу оказать помощь, причем не только в программировании графики, но и в сетевых технологиях, в дизайне уровней и т.д. Если вы изъявите желание принять меня в свою команду, то напишите мне об этом, и если я не буду занят другим проектом, то обязательно присоединюсь.

1. Предисловие. Планы на будущее.

Писать все это я задумал для систематизирования своих знаний в этой области. А также, я надеюсь, у меня хватит времени, желания и терпения для того чтобы закончить начатое, т.е. прийти к логическому завершению - созданию трехмерного аппарата (движка), который позволил бы создавать игры в стиле 3d-action. Конечно, я не питаю больших амбиций по поводу масштабности и высокой рентабельности этого движка. Мной движет пока только простой интерес.

Я убежден, что человек гораздо лучше будет усваивать теоретическую информацию, если у него она с чем-то ассоциируется. Поэтому, здесь я буду приводить примеры почти по каждому пункту.

Не секрет, что сегодня существует множество видеокарт, с акселераторами и без них. Для каждой такой карты написан свой драйвер. В силу популярности Windows, большинство драйверов или даже видеокарт разрабатывается именно для этой системы. Поэтому решено оставить старую DOS и перейти на Windows.

Программируя 3d-движки под DOS, приходилось всегда изобретать большой велосипед, потому что нужно было искать информацию для программирования конкретных видеокарт на низком уровне, иначе просто не получался хороший проект, т.к. он не мог работать у всех. Кроме этого, программисту 3d-движков под DOS очень часто необходимо писать не только множество модулей поддержки видеоаппаратуры, но и еще алгоритмы прорисовки, построения, затенения и текстурирования трехмерных объектов (если конечно он не использует специальную библиотеку, каких было мало). Итак, мы подходим к самому главному - к программированию под Windows с использованием DirectX.

По своему опыту я знаю, что если начать писать движок сразу под Direct3D, то многое из области трехмерной графики останется <за кадром> долгое время. И это не очень хорошо, поскольку этот факт часто не дает завершить проект и остается в лучшем случае 50% работы. Чтобы увеличить шансы закончить проект под Direct3D, мы будем начинать с использования DirectDraw. Объясняя простым языком (для тех, кто не знает), DirectDraw и Direct3D - это составные части библиотеки DirectX; первая работает с графикой <на плоскости>, а вторая - в трехмерном пространстве.

Итак, как я уже сказал, мы начнем с DirectDraw (в дальнейшем просто DDraw). DDraw работает с двумерной графикой, поэтому, чтобы работать в DDraw с трехмерной графикой, нам придется придумать соответствующие алгоритмы, с помощью которых мы будем получать трехмерную графику на экране монитора.

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

После того, как мы разберемся с DDraw, мы приступим к изучению Direct3D, перенесем полученные ранее знания и добавим более продвинутые эффекты к разрабатываемому движку.

За работу!

Следующая глава