Погружение в глубины DirectX 8, 9 на Delphi 6,7
Занявшись программированием DirectX вы неминуемо столкнетесь с рядом трудностей и проблем. Главная - это конечно то, что Вам необходимо знать не только Delphi, но и C++, т.к. все примеры в DirectX SDK показаны именно на C++ (и на C# тоже!). Кроме того, будет и масса других трудностей. Однако Мы с Вами вместе попытаемся разобраться в тех проблемах, которые будут возникать по ходу работы. Основная работа автора на данный момент - это реализация проекта "Тайны Морских Глубин: Операция Тайфун". На примере его мы и подойдем к созданию собственной игры на Delphi.
Первая проблема, которая возникает при попытках загружать в примерах из DirectX SDK (естественно переделанных под Delphi) собственные модели. Так например, рассмотрим пример CubeMap.
CubeMap - вам представлен модифицированный вариант. Модификация касается не кода, а только используемых моделей. | |||
Суть проблемы: при попытке загрузить собственную модель замкнутого пространства - в нашем случае обычный box (с "вывернутыми наизнанку" нормалями к граням) приложение формирует на экране какой-то мусор, вся статистика нарушена. |
Для демонстрации ошибки скачайте пример, найдите следующую строку кода: 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
{ и переделайте следующим образом: TextureFilename
{ т.е. использовав относительный путь! |
Скачав данный пример и распаковав архив в папке maxmodels вы найдете модели box.max и box5.max - они пригодятся Вам для сравнения того, в сколько раз пришлось уменьшить модели. Box - это исходная модель (1х1х1 метр); Box5 - уменьшенная в 0,05 раз. |
Важные замечания: для распаковки скачиваемого архива вам может потребоваться WinRar 3.5 и выше!
Для устранения ошибок во время компиляции прочитайте файл readme приложенный к архиву!
[На главную] [Новости] [Статьи]
(с) Мега Информатик 2006