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

Кроме того, объясняет Стюарт, чтобы выиграть в скорости игры, там, где это возможно, необходимо снизить уровень детализации моделей (к примеру, меньше полигонов на удаленных объектах), а также убедиться, что базы данных и параметры организованы эффективно (как, конечно же, это было в игре Drakan).
В базах данных хранятся звуки, описания поведения, модели, текстуры и ресурсы сценария. Четкая организация этих элементов крайне важна для того, чтобы команда могла эффективно работать над уровнями. В игре Drakan поведение любого объекта определяется конкретными параметрами. Кроме того, существует отображение между ресурсами в базе данных и программным кодом, поэтому важно, чтобы все параметры задавались надлежащим образом.
Далее Стюарт Денман обсуждает аргументы «за» и «против» работы с лицензированным или собственным движком.
Приобретать лицензию или нет, зависит от той цели, которую вы себе поставили. Если вы решили сказать новое слово в технологии, то заемный движок не самое лучшее решение. Если же ваши планы не простираются дальше создания игры на основе оригинального сценария, лицензионный движок тут как тут. Лицензирование сэкономит годы работы и позволит уделить внимание самой игре.
Surreal повезло, поскольку мы добились начального финансирования проекта, имея на руках лишь небольшую демонстрационную программку. Большинству разработчиков это не удается. Я осознал (хотя и не сразу), что попасть в эту индустрию, если вы никогда в ней не работали, весьма трудно. Вам необходимо доказать собственную состоятельность либо с помощью репутации, либо поразив всех гениальной демо-программой. Жаждущие получить заказ на создание игры всегда могут появиться из ниоткуда и с ходу выдать демо-версию, соперничающую с профессиональными работами. Пока такое возможно, а значит, шансы есть у всех
В программировании информация часто хранится в виде массивов, то есть строк данных. Нередко попытка обращения к областям памяти находящимся за пределами массивов, вызывает общий сбой Windows - General Protection Fault (GPF). Например, если массив содержит только пять элементов, а программа попытается получить доступ к восьмому, вы увидите на экране сообщение о GPF. Чтобы застраховать себя от подобных ошибок, обратите внимание на следующую программу.
Это должен сделать каждый программист - создать шаблон для массивов. Не используйте массивы в стиле Си, если это не является абсолютно необходимым. Определение шаблона должно выглядеть примерно так:
template <class Entry> class Array
{
private:
Entry *pEntry;
int iSize;
Далее шаблон содержит внутренние компоненты для добавления (размещения) и удаления записей массива, а также компоненты для доступа к массиву, подобные приведенному ниже:
public:
// Обеспечивает доступ к записям массива...
Entry &operator [](const int ilndex) const
{
Assert(ilndex >= 0 && ilndex < iSize);
return pEntry[ilndex];
}
Функция Assert очень важна, так как она вызывает ошибку отладки, если значение выражения-аргумента Assert равно FALSE. Этот небольшой фрагмент программы спас нас от такого количества ошибок, что я просто не представляю, что бы мы без него делали. Наш макрос Assert выглядит примерно так:
// Режим отладки:
#if defined(_DEBUG)
extern BOOL MyAssertFunc(BOOL, int, char *};
#define NatBreakf) { _asm { int 3 } }
// Утверждает, что значение ехр - истина.
#define Assert(ехр) \
if (MyAssertFunc((int)(exp),__LINE__,__FILE__)) \
NatBreak();
// Режим без отладки:
#else
#define Assert(exp)
#endif // _DEBUG
При окончательной сборке все макросы Assert исключаются из компиляции. При сборке для отладки функция MyAssertFunc включается в библиотеку. Функция вычисляет первый аргумент и выводит окно сообщения, указывающее строку и файл, где сработало утверждение (последние два аргумента). После этого программист может принять решение продолжить или прервать выполнение. При выборе прерывания функция возвращает значение TRUE, и инструкция int 3 приведет к остановке отладчика на строке макроса Assert.
Узнать все о проекте Drakan вы сможете, заглянув на сайт www.psygnosis.com/drakan/.