На главную страницу |
Программирование трехмерной графики | ||||
|
||||
|
Документ: Знакомство с программированием трехмерной графики. Часть первая.
Автор: Прядкин Дмитрий (pryadkin@inbox.ru или 2:5010/207.3@FidoNet). Примечание: Исходный код написан на Delphi 6 (думаю, также подойдет любая версия, начиная с четвертой). Помимо этого, используются конверсионные модули DirectX для Delphi от JEDI-project. Соглашения об авторских правах: Все права по распространению и публикации документа остаются за мной. В особо сложных случаях, когда кто-то другой будет претендовать на авторство этого текста (или любой его части), я могу разрешить спор при помощи предъявления официального документа, закрепляющего за мной права авторства. Однако я считаю бессмысленными запреты на распространение документа. Поэтому каждый может распространять его на любых носителях, при условии сохранения первоначального вида данного документа. Обратная связь: Если вам этот документ помог, то я буду рад услышать от вас отзыв. В равной степени я готов выслушать и положительные, и отрицательные точки зрения. Если вы планируете написать какую-либо игру, то я могу оказать помощь, причем не только в программировании графики, но и в сетевых технологиях, в дизайне уровней и т.д. Если вы изъявите желание принять меня в свою команду, то напишите мне об этом, и если я не буду занят другим проектом, то обязательно присоединюсь. Писать все это я задумал для систематизирования своих знаний в этой области. А также, я надеюсь, у меня хватит времени, желания и терпения для того чтобы закончить начатое, т.е. прийти к логическому завершению - созданию трехмерного аппарата (движка), который позволил бы создавать игры в стиле 3d-action. Конечно, я не питаю больших амбиций по поводу масштабности и высокой рентабельности этого движка. Мной движет пока только простой интерес. Я убежден, что человек гораздо лучше будет усваивать теоретическую информацию, если у него она с чем-то ассоциируется. Поэтому, здесь я буду приводить примеры почти по каждому пункту. Не секрет, что сегодня существует множество видеокарт, с акселераторами и без них. Для каждой такой карты написан свой драйвер. В силу популярности Windows, большинство драйверов или даже видеокарт разрабатывается именно для этой системы. Поэтому решено оставить старую DOS и перейти на Windows. Программируя 3d-движки под DOS, приходилось всегда изобретать большой велосипед, потому что нужно было искать информацию для программирования конкретных видеокарт на низком уровне, иначе просто не получался хороший проект, т.к. он не мог работать у всех. Кроме этого, программисту 3d-движков под DOS очень часто необходимо писать не только множество модулей поддержки видеоаппаратуры, но и еще алгоритмы прорисовки, построения, затенения и текстурирования трехмерных объектов (если конечно он не использует специальную библиотеку, каких было мало). Итак, мы подходим к самому главному - к программированию под Windows с использованием DirectX. По своему опыту я знаю, что если начать писать движок сразу под Direct3D, то многое из области трехмерной графики останется <за кадром> долгое время. И это не очень хорошо, поскольку этот факт часто не дает завершить проект и остается в лучшем случае 50% работы. Чтобы увеличить шансы закончить проект под Direct3D, мы будем начинать с использования DirectDraw. Объясняя простым языком (для тех, кто не знает), DirectDraw и Direct3D - это составные части библиотеки DirectX; первая работает с графикой <на плоскости>, а вторая - в трехмерном пространстве. Итак, как я уже сказал, мы начнем с DirectDraw (в дальнейшем просто DDraw). DDraw работает с двумерной графикой, поэтому, чтобы работать в DDraw с трехмерной графикой, нам придется придумать соответствующие алгоритмы, с помощью которых мы будем получать трехмерную графику на экране монитора. Примечание: Говоря о трехмерной графике, мы подразумеваем лишь иллюзию трехмерности, т.к. изображение на экране монитора может быть только плоским. После того, как мы разберемся с DDraw, мы приступим к изучению Direct3D, перенесем полученные ранее знания и добавим более продвинутые эффекты к разрабатываемому движку. За работу! Следующая глава |