Заметки по работе с DirectX8.1 SDK и по созданию 3D-игр

 

 

Погружение в глубины DirectX 8, 9 на Delphi 6,7

Занявшись программированием DirectX запаситесь терпением и будьте упорны в достижении своих целей! Вам потребуются знания не только Delphi, но и C++, т.к. все примеры в DirectX SDK показаны именно на C++ (и на C# тоже!). Кроме того, необходимы хотя бы минимальные теоретические представления (основы векторного исчисления, работа с матрицами 4х4). Всё это есть в документации по DirectX (DX SDK). Однако Мы с Вами вместе попытаемся разобраться в тех проблемах, которые будут возникать по ходу работы. Основная работа автора на данный момент - это реализация проекта "Тайны Морских Глубин: Операция Тайфун". На примере его мы и подойдем к созданию собственной игры на Delphi.

Первая проблема, которая возникает при попытках загружать в примерах из DirectX SDK (естественно переделанных под Delphi) собственные модели.

  Здесь вам будет показано как избавиться от ошибок визуализации.
 
  Суть проблемы: при попытке загрузить собственную модель замкнутого пространства - в нашем случае обычный box (с "вывернутыми наизнанку" нормалями к граням) нарушено обновление картинки кадра приложения.
приложение с ошибками визуализации

Для демонстрации ошибки скачайте пример, и в методе RenderScene найдите следующую строку кода:

D3DXMatrixScaling(matWorld, 0.25, 0.25, 0.25);

 

и исправьте на D3DXMatrixScaling(matWorld, 1.0, 1.0, 1.0);. Откомпилируйте и запустите пример. Вы увидите результат ошибки.

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

Решение: снова в методе RenderScene найдите ту же строку кода и восстановите:

D3DXMatrixScaling(matWorld, 0.25, 0.25, 0.25);

Тогда всё прекрасно работает!
       
 

Важное замечание по поводу x-файлов получаемых при экспорте из 3DS MAX7: все пути к текстурам получаются абсолютные. Это необходимо исправить! Иначе Ваш пример не будет корректно работать на любом другом компьютере. Для этого откройте x-файл при помощи любой простой программы для редактирования текста (Блокнот, WordPad), найдите в нём все строки с наименованием TextureFilename, содержащие абсолютный путь к текстуре, например:

TextureFilename {
"D:/MyComp/Example/media/textures/box_tex.bmp";

и переделайте следующим образом:

TextureFilename {
"media/textures/box_tex.bmp";

т.е. использовав относительный путь!

Скачав данный пример и распаковав архив в папке media\maxmodels вы найдете модель redbox.max - она пригодится Вам для изучения - т.к. 3ds max не позволяет загружать модели в формате x.  

Важные замечания: для распаковки скачиваемого архива вам может потребоваться WinRar 3.5 и выше!

Для устранения ошибок во время компиляции прочитайте файл readme приложенный к архиву!

[Назад]

 

[На главную] [Новости] [Статьи]

 

(с) Мега Информатик 2006-2007

Hosted by uCoz