Программирование 3D-игр в DirectX на Delphi
 
         
    [Главная] [Новости] [Статьи] [Игры] [Проекты] [Автор]  
         
    [Архив новостей]    
         
  [Форум] на форуме можно задать вопрос, посмотреть ответы на часто задаваемые вопросы  
         
  Основы 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

Вот пути, которые Вам нужно использовать в том случае, если Вы используете код примеров из архива

delphi_dx9.rar

..\..\..\..\..\dx9_headers\Borland_D9
..\..\..\Common

Если пути к папкам с библиотеками исходного кода 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 = (
(x: 150.0; y: 50.0; z: 0.5; rhw: 1.0; color: $ffff0000), // x, y, z, rhw, color),
(x: 250.0; y: 250.0; z: 0.5; rhw: 1.0; color: $ff00ff00),
(x: 50.0; y: 250.0; z: 0.5; rhw: 1.0; color: $ff00ffff)

 
     
  Если Вы совсем новичок в DirectX, то читайте оригинальную документацию, которая идет с DirectX SDK. Тут придется запастись еще и знанием английского или хорошим словарем-переводчиком.  
     
   
     
  Пример Matrices. Всё опять аналогично, меняются только интерфейсы с 8 на 9 версию. Чтобы не появлялось предупреждение на стадии компиляции добавьте модуль DXTypes в секцию uses  
     
 

Отличие данного примера от предыдущего в наличии анимации - вращения треугольника. Сама анимация выполняется внутри SetupMatrices.

Вашим заданием будет: залезть в код анимации и изменить ее параметры - скорость вращения

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

Так и только так можно постичь истину того, как работать с DirectX

 
     
 

Ответ на вопрос:

iTime := timeGetTime mod AnimSpeed;
fAngle := iTime * (2.0 * D3DX_PI) / AnimSpeed;

где вместо AnimSpeed подставляете любое значение и смотрите результат

 
     
   
     
 

Lights - снова добавьте DXTypes в секцию uses и всё будет ОК!

Для новичков будет полезно заглянуть в метод InitGeometry

именно в нём задается геометрия цилиндра!

Еще я заметил, что для векторного типа вместо TD3DXVector3 используется тип TD3DVector, но так он объявлен в новом модуле DXTypes!

Хорошим упражнением будет изменение цвета цилиндра

 
     
 

Ответ на вопрос:

mtrl.Diffuse.r := 0.02; mtrl.Ambient.r := 0.5;
mtrl.Diffuse.g := 0.5; mtrl.Ambient.g := 0.5;
mtrl.Diffuse.b := 0.1; mtrl.Ambient.b := 0.5;
mtrl.Diffuse.a := 1.0; mtrl.Ambient.a := 1.0;

 
     
   
     
 

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);

и заменить ее на
vEyePt:= D3DXVector3(0.0, 3.0,-35.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

 

Hosted by uCoz