Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование с нуля - это совсем просто! 151) Программирование 3D-игр: Введение


Школа программирования

151) Программирование 3D-игр: Введение

В этом курсе мы изучим возможности системы Blitzbasic 3D, предназначенной для создания полноценных 3D-приложений (типа Дума или Фолаута :-). Данный курс основан на курсе программирования спрайтовых игр, но не полностью, а прежде всего на основных принципах программирования, самом языке Blitzbasic. Создание трехмерных приложений происходит уже по другим схемам.

Введение

Создание трехмерных программ в системе BlitzBasic ведется на языке Basic3D (B3D), диалекте общеизвестного Бейсика, ориентированного на быстрое и простое создание трехмерной графики. Многие операторы этого языка очень мощные и позволяют одной командой выполнить весьма сложное действие.

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

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

Все объекты, которые существуют в мире нашей программы, так и называются - сущности (entities). А моделируемая программой область мира со всеми входящими в нее сущностями называется сцена.

Они имеют общие характеристики - позицию в трехмерном пространстве (абсолютные координаты X,Y и Z), размер, а также наклон (поворот) по каждой из осей. Соответственно, сущности также могут перемещаться по осям, менять размеры (растягиваться, сжиматься), и поворачиваться на заданные углы.

При желании каждой сущности можно указать родителя (parent). Если он задан, то все манипуляции, производимые с родительской сущностью, будут также отражаться на ее подчиненных сущностях-детях (child).

Это удобно, например, в ситуациях, когда мы создали сложносоставной объект (например робот), из множества простых элементов-сущностей, и перемещать нам надо этот объект целиком, одновременно все его составные части. То же относится и к растягиванию, и к вращению. Тогда достаточно воздействовать только на родительский объект.

Но родителя можно и не задавать, а также в любой момент удалять привязку к родителю - это полезно, когда надо разобрать объект на кусочки (например после взрыва робота отделить от него руку или ногу).

Мы можем создать мир из таких сущностей, но пользователю, очевидно, надо где-то в этом мире находиться, чтобы отображаемое на экране было тем, что пользователь видит (с его позиции). Для этого в B3D есть понятие камеры (camera). Камеру можно установить в любой точке нашего мира, сориентировать ее в любом направлении, и формировать изображение на экране как бы ее "глазами". Очевидно, что если камера в программе не создана, то и показываться на экране ничего не будет.

Свет, прожектор (lights). Свет нужен для того, чтобы светить, освещать наш мир. Может показаться, что если свет в программе не создан, то мир будет во тьме, и никакая камера тут не поможет, но это не так. По умолчанию в созданном мире всегда есть так называемый окружающий свет (ambient light), который худо-бедно, но каким-то образом освещает наши сцены. Но он не имеет ни источника, ни направления, ни местоположения, поэтому, в частности, и теней он не создает. Для создания направленных источников света в B3D имеются соответствующие средства.

Поверхность, плоскость (plane). Эта сущность предназначена для создания бескрайних, бесконечных плоских пространств, на которых и строится обычно мир программы. На основе поверхностей создается земля, вода, небо, другие игровые поверхности. За счет универсальных для всех сущностей свойств (вращение, движение) удается создавать различные и очень красивые эффекты (небо с бегущими по нему облаками и т. д.).

Местность (terrain). Данная сущность, в чем-то схожая с плоскостью, но применяется для более специфических целей, прежде всего создания очень больших и протяженных ландшафтов. Формируются они из сети треугольных полигонов, которых в сцене могут насчитываться миллионы! По мере удаления местность аппроксимируется, как и в реальном мире, становясь расплывчатой, нечеткой.

Сетки, модели (mesh). Одно из базовых понятий B3D, с помощью которых в программе формируются все физические объекты реального мира. Они представляются с помощью множества треугольных полигонов, каждый из которых в свою очередь может иметь оригинальную окраску или покрытие (текстуру). Такие сетки-модели проще всего заранее создавать в популярных 3D-редакторах типа 3D Studio, а потом загружать в BlitzBasic соответствующими командами B3D.

Точка отсчета (pivot). Реально данная сущность в сцене не существует. Нужна она только для удобства разработчика. Например, если требуется осуществлять некоторое единообразное действие над группой моделей, можно всем им присвоить единую точку отсчета, и потом выполнять это действие (перемещение, вращение) только с ней, а меняться будут все связанные с ней модели.

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

В дальнейшем мы познакомимся с каждым из этих типов сущностей B3D на практике более подробно.


(c) 2004-2007 Сергей Бобровский bobrovsky as russianenterprisesolutions.com

Школа программирования с нуля
Все предыдущие выпуски базового курса всегда тут:
http://www.infiltration.ru/p/

Неофициальный сайт поддержки (со срочными вопросами - сюда):
www.prog-begin.net.ru.


Мои учебные курсы "Технологии Delphi / C++ / C#. Разработка приложений для бизнеса".
http://shop.piter.com/display.phtml?a_id=17681&web_ok=all

Все эти учебные курсы рассчитаны не только на разработчиков, но и на всех тех, кто хочет стать ИТ-менеджером. Для этого как минимум нужно иметь общее представление о современных технологиях разработки и их истории и владеть соответствующей терминологией.
В книгах описаны десятки технологий, каждой из которых посвящены отдельные книги. Таким образом, купив один учебный курс, вы существенно сэкономите :) В книгах полностью описаны:
- Delphi (версия 2006, полностью совместимая с Turbo Delphi) для обеих платформ - Win32 и .NET;
- C# (новый язык Microsoft, на котором базируется платформа .NET и все новые версии Windows);
- C++ для платформы Win32.
Охвачены также темы работы с файлами на этих платформах, создания файл-серверных, клиент-серверных, распределенных приложений, веб-программ (Indy, ASP.NET, веб-сервисы). Описаны языки SQL и OCL. Немало глав посвящены истории программирования и различных технологий. Особое внимание уделено созданию программ с помощью технологии ECO и языка моделирования UML - программы фактически рисуются, и теперь даже для создания корпоративных приложений и их переноса в Интернет не обязательно знать программирование!
Отдельная часть отведена технологиям организации групповой работы, управления требованиями, контроля версий, локализации и тестирования.
Тут подробнее про книги.

Мои книги, которые пока доступны в продаже:


Дизайн рассылки: Алексей Голубев - Web-дизайн и web-программирование


В избранное