[Главная] [Новости] [Статьи] [Игры] [Проекты] | [Автор] | |||
[Архив новостей] | ||||
[Форум] | на форуме можно задать вопрос, посмотреть ответы на часто задаваемые вопросы | |||
Основы 3D-программирования DirectX9 в Delphi 2006: теоретические и практические основы создания игр. | ||||
Здравствуйте! Вы попали на информационно-образовательный сайт посвященный информатике, информационным технологиям и компьютерным играм. Подробнее о целях и задачах сайта в разделе Главная. [English version of this page here...] | ||||||
[Базовые уроки по DirectX] [Основы DirectMusic на Delphi] [Основы DirectInput8 на Delphi] [Основы DirectSound8 на Delphi] | ||||||
[Разработка компьютерной игры] [Пример игры Donuts3D] [Delphi DirectX] | ||||||
Что такое Delphi DirectX ? |
[назад] [далее] [к содержанию] | ||
Мы рассмотрим особенности, которые могут встретиться в примерах delphi_dx9\samples\DirectX90\Direct3D\Tutorials\ предполагается, что папка delphi_dx9 это та самая папка, куда Вы распаковали содержимое архива delphi_dx9.rar |
||
Думаю не лишним будет напомнить, что прежде чем компилировать любой пример исходного кода в Delphi 2006 (или другой версии, которую Вы используете) нужно 1) Проверить настройки открытого проекта Project > Options > Directories/Conditionals > Search path Вот пути, которые Вам нужно использовать в том случае, если Вы используете код примеров из архива ..\..\..\..\..\dx9_headers\Borland_D9 Если пути к папкам с библиотеками исходного кода delphi directx 9 заданы неверно, то Вы получите ошибки компиляции 2) Перед запуском созданного exe-файла скопируйте в папку проекта файлы D3DX9sab.dll DXErr9ab.dll Если пример использует какие-либо ресурсы (модели, текстуры, звуковые файлы), то Вы должны позаботиться о том, чтобы приложение могло найти их. Должна быть корректно установлена последняя версия DX SDK в Вашей системе, либо Вы должны модифицировать пути к ресурсам в исходном коде так, чтобы разместить их внутри папки данного проекта в отдельной папке, например внутри подпапки Media В противном случае Вы получите ошибки при исполнении приложения |
||
Переходим к примерам Vertices, Matrices, Lights, Textures, Meshes |
||
Пример Vertices полностью аналогичен тому, что имеет место в примере из Delphi DirectX 8.1, за тем лишь исключением, что вместо интерфейса Direct3D8 используется Direct3D9 В качестве упражнения с примером попробуйте задать другой цвет вершин у треугольника. |
||
Ответ на поставленный вопрос: vertices:
array[0..2] of TCustomVertex = ( |
||
Если Вы совсем новичок в DirectX, то читайте оригинальную документацию, которая идет с DirectX SDK. Тут придется запастись еще и знанием английского или хорошим словарем-переводчиком. | ||
Пример Matrices. Всё опять аналогично, меняются только интерфейсы с 8 на 9 версию. Чтобы не появлялось предупреждение на стадии компиляции добавьте модуль DXTypes в секцию uses | ||
Отличие данного примера от предыдущего в наличии анимации - вращения треугольника. Сама анимация выполняется внутри SetupMatrices. Вашим заданием будет: залезть в код анимации и изменить ее параметры - скорость вращения Опять же для новичков хочу заметить - если Вам что-то неясно-непонятно - читайте и читайте документацию по DirectX, вчитывайтесь в каждое слово и фразу!!! И эксперементируйте с кодом примеров по принципу: а что если сделать так... Так и только так можно постичь истину того, как работать с DirectX |
||
Ответ на вопрос: iTime
:= timeGetTime mod AnimSpeed; где вместо AnimSpeed подставляете любое значение и смотрите результат |
||
Lights - снова добавьте DXTypes в секцию uses и всё будет ОК! Для новичков будет полезно заглянуть в метод InitGeometry именно в нём задается геометрия цилиндра! Еще я заметил, что для векторного типа вместо TD3DXVector3 используется тип TD3DVector, но так он объявлен в новом модуле DXTypes! Хорошим упражнением будет изменение цвета цилиндра |
||
Ответ на вопрос: mtrl.Diffuse.r
:= 0.02; mtrl.Ambient.r := 0.5; |
||
Textures - ну вот и пришла пора использовать долгожданные ресурсы! В этом примере используется текстура banana.bmp. Пример полностью аналогичен тому, что есть в Delphi DirectX 8.1, меняются только версии интерфейсов, а вот тип вектора снова объявлен как TD3DXVector3 Заданием Вам будет - взять и натянуть на цилиндр другую текстуру. |
||
Ответ: Взять какую-либо картинку квадратных размеров 128х128 или 256х256, сохранить в формате bmp, jpg или tga, а затем задать имя данного файла в строке кода - if FAILED(D3DXCreateTextureFromFile(g_pd3dDevice, 'some_texture.jpg', g_pTexture)) then |
||
Meshes - здесь уже используется 2 ресурса: модель и связанная с ней текстура. В примере активно используются интерфейсы новых версий (DX9 вместо DX8) для базовых объектов, некоторых переменных. Всё остальное - полный аналог такого же примера из Delphi DirectX 8.1 | ||
Вашим заданием может быть - взять какую-либо текстурированную модель в формате x и использовать ее в качестве ресурса в данном примере. Модель не должна быть анимированной! Это должен быть статичный меш. Если под рукой нет ничего подходящего - посмотрите в разделе Галерея 3D-моделей | ||
Если всё вам ясно-понятно и вопросов больше нет можно переходить к чему-то еще более сложному. Новичкам советую не торопиться и по-мере возникновения новых вопросов, особенно в ходе работы над другими, более сложными примерами, не бояться возвращаться к этим, более простым примером и использовать их как основу для написания небольших тестовых приложений с целью уяснения всех неясных моментов. Кроме того, не забывайте обращаться за ответами к документации по DirectX. Именно она должна быть Вашим главным руководством и настольной книгой по всем возникающим вопросам! Учите английский! Для этого достаточно обзавестить хорошей программой словарем или словарем-переводчиком, тогда станет намного легче! |
||
Ответ: |
||
Если Ваша модель совсем не видна в окне приложения или видна, но частично, то решением может быть: открытие оригинала модели в формате 3ds max, уменьшение в 2-3 раза, экспорт в формат x с последующей повторной проверкой в приложении. Другой вариант - найти строку кода (внутри procedure SetupMatrices) vEyePt:= D3DXVector3(0.0, 3.0,-5.0); и
заменить ее на т.е. нужно изменить значение положения наблюдателя из камеры по оси Z на более удаленное, тогда крупная модель наблюдаемая с большего расстояния станет полностью видна. Если еще нет, то подбирайте значение опытным путём. |
||
в следующем уроке мы сразу же с места в карьер попробуем разобраться с примером MultiAnimation, пока главным образом в плане использования своих анимированных моделей. После этого займемся созданием собственного класса для анимированной 3D-модели, а после перейдем к вопросам портирования существующих наработок в проектах Delphi DirectX 8.1 на платформу Delphi DirectX 9. Для меня это будет главным образом работа над проектом Нечто: Необъяснимое - Нить накала | ||
[назад] [далее] [к содержанию] |
Обновления
и новости о развитии Delphi DirectX проекта http://www.megainformaticsite.pochta.ru http://www.megainformatic.boom.ru http://www.megainformatic.narod.ru
|
|||||||||
по всем вопросам пишите на megainformatic@mail.ru или оставьте сообщение на форуме |
|||||||||
Обмен ссылками | |||||||||
|
|||||||||
(с) МЕГА ИНФОРМАТИК 2006-2009 |