В некоторых играх тени просчитываются в самой игре а можно просчитать …

схема моего проекта

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

Если весь уровень создается в одном максовом файле, то удобно поменять настройки в customize -> grid and snap settings -> home grid – grid spacing = 5.0, perspective view grid extend = xx (поставьте побольше) . А после этого можно использовать snaps toggle для точного перемещения объектов по сцене.


Теперь о программной части работы.

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

Первым делом, я начал поиск компонентов, упрощающих работу с 3d графикой, т.к. работа со встроенными возможностями Delphi была бы тяжело выполнима ввиду сложного доступа к этим возможностям (по крайней мере, на мой взгляд :)). И был найден ряд таких компонентов, но большинство из них было ограничено в возможностях и потому не давало нужного простора для размышлений. Поэтому была выбрана библиотека под названием GLScene, которая давала возможность доступа ко многим возможностям OpenGl. Взять эту библиотеку можно на сайте www.glscene.org (она является обсолютно бесплатной). Была придумана такая схема проекта (привожу ее просто как пример).

схема моего проекта

По этой схеме и были созданы основные формы и модули в проекте.

Важным периодом создания был период оптимизации (текстур, моделей и программы) для ускорения работы программы, но на данном этапе проявился недостаток создания приложения, которое создает объекты из файла. Все дело в том, что при создании каждого объекта программа ищет в массиве объектов пути к модели или текстуре, и на это уходит большой объем времени. Как вариант решения было бы создание всех статичных объектов как единого объекта. Но здесь возникает другая проблема – на видеокартах с памятью в 64 Мб максимальное разрешение текстуры – 2024*2024, а если создавать гигантский объект, текстуры нужны, как минимум, в 2 раза большие! Что было неприемлемо, т.к. сейчас много компьютеров, оснащенных, слабыми видеокартами (например, у меня GeForce4MX 440, на новую нет денег :-( ). Из-за этого приходится мириться с невысокой скоростью загрузки.

После создании уровня нужно было создать объекты, с которыми можно было бы взаимодействовать, а значит, создать модуль для обработки скриптов, который учитывался еще на раннем этапе. Ничего необычного здесь не применялось – просто построчное чтение переданного из параметров скрипта (*.txt) и его обработка. Так же было решено для некоторых объектов передавать некоторые параметры вместо скрипта (растения, анимированные объекты и стенки).

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

стенки

После создания программы я создал на ее основе редактор карт, редактор параметров моделей и редактор скриптов. Они были созданы для того, чтобы ускорить и упростить редактирование карт, моделей и скриптов пользователем (советую делать их всем игроделам).

редактор

Подробнее о выбранных форматах файлов.

Для простых объектов взяты модели 3DS потому, что они занимают мало места и редактируются большинством 3D редакторов. Также причиной для выбора 3DS послужило то, что в этом формате все объекты сохраняют свое положение относительно глобального центра координат, поэтому я могу создать уровень в 3D Max, и при экспортировании моделей они будут сохранять свое положение относительно друг друга, и не будет необходимости перемещать их в редакторе уровней). Данный способ неприменим к объектам со скриптом pick (скрипт, при помощи которого персонаж поднимает или использует объекты), потому что при обработке данного скрипта должно учитываться расстояние до объекта). Формат моделей MD2 был взят как единственный формат, нормально поддерживаемый в GLScene для анимированных объектов (анимацию из 3DS загрузить мне так и не удалось, хотя, насколько я знаю, это возможно, и если у кого нибудь получится – напишите:) ). Текстуры могут быть как JPG, так и TGA, они были выбраны как наиболее сжатые.

Ну, в принципе, урок я закончил. Надеюсь он вам понравился.

Я решил не напрягать урок скринами из моей игры, их можно посмотреть как мою работу the game.

Вопросы и пожелания по мылу tony89@yandex.ru или по ICQ 297-984-288, но лучше по мылу (в инет я выхожу нечасто).

Более подробно о программировании или моделировании для игр, возможно, будет рассказано в следующем уроке, если, конечно, к уроку будет проявлен интерес :-) , а пока это все.


Пашинин Антон, он же crol
2005 год

Понравилась статья? Поделиться с друзьями: