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

 

 

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

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

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

  CubeMap - вам представлен модифицированный вариант. Модификация касается не кода, а только используемых моделей.
 
  Суть проблемы: при попытке загрузить собственную модель замкнутого пространства - в нашем случае обычный box (с "вывернутыми наизнанку" нормалями к граням) приложение формирует на экране какой-то мусор, вся статистика нарушена.
Неверно работающее приложение DirectX

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

if FAILED(m_pSkyBox.Create_(m_pd3dDevice, PChar('media\models\box5.x'))) then Exit;

(она находится в реализации метода function CMyD3DApplication.InitDeviceObjects: HResult;)

и исправьте "box5.x" на "box.x". Откомпилируйте и запустите пример. Вы увидите результат ошибки.

  Решение: модели, используемые в оригинальном примере CubeMap из DirectX SDK имеют очень небольшие размеры - порядка нескольких сантиметров (в метрической системе 3DS MAX 7). Если использовать очень большую модель замкнутого пространства, то DirectX-машина просто не в состоянии корректно отрисовывать такую модель. Необходимо внести модификации в коде, рассчитанные на большую модель. Но мы в нашем примере поступим наоборот - просто уменьшим размеры модели. Тогда всё прекрасно работает!
Решение проблемы
Итак, если Ваше приложение DirectX отказывается корректно работать с Вашими моделями, то в Вашем коде логические ошибки, касаемые некорректного предположения о размерах моделей. Необходимо или изменить размеры моделей или модифицировать код!
       
 

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

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

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

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

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

Скачав данный пример и распаковав архив в папке maxmodels вы найдете модели box.max и box5.max - они пригодятся Вам для сравнения того, в сколько раз пришлось уменьшить модели. Box - это исходная модель (1х1х1 метр); Box5 - уменьшенная в 0,05 раз.  

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

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

 

 

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

 

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

Hosted by uCoz