[Главная] [Новости] [Статьи] [Игры] [Проекты] | [Автор] | |||
[Архив новостей] | ||||
[Форум] | на форуме можно задать вопрос, посмотреть ответы на часто задаваемые вопросы | |||
Основы 3D-программирования DirectX9 в Delphi 2006: теоретические и практические основы создания игр. | ||||
Здравствуйте! Вы попали на информационно-образовательный сайт посвященный информатике, информационным технологиям и компьютерным играм. Подробнее о целях и задачах сайта в разделе Главная. [English version of this page here...] | ||||||
[Базовые уроки по DirectX] [Основы DirectMusic на Delphi] [Основы DirectInput8 на Delphi] [Основы DirectSound8 на Delphi] | ||||||
[Разработка компьютерной игры] [Пример игры Donuts3D] [Delphi DirectX] | ||||||
Что такое Delphi DirectX ? |
[назад] [далее] [к содержанию] | ||
16/05/2009 | ||
Продолжаем разбирать пример MultiAnimation из DirectX SDK 9 | ||
function
CMyD3DApplication.FrameMove: HRESULT; var i: Integer; begin // we only need to call the animation routine 60 times per second //выполнение анимации происходит только 60 раз в секунду, т.е. делая это чаще мы можем повысить точность и плавность анимации, но ценой снижения производительности приложения и наоборот - делае это реже можно повысить производительность, но ценой качества анимации if (m_fTime - m_fLastAnimTime > (1.0 / 60.0)) then begin for i:= 0 to m_v_pCharacters.Count - 1 do m_v_pCharacters[i].Animate(m_fTime - m_fLastAnimTime);
m_fLastAnimTime := m_fTime;
// Update the camera //обновляется
положение камеры
Result:= S_OK; |
||
из метода Render рассмотрим только ту часть кода, которая отвечает за отрисовку игровой сцены и персонажа - function CMyD3DApplication.Render: HRESULT; {...} // set up the camera //настройка камеры
// are we following a tiny, or an independent arcball camera? //камера
следует за персонажем или она независима?
// set static transforms
pChar.GetPosition(vCharPos); //положение
персонажа в сцене //так как точная ориентация любого объекта в 3D-пространстве определяется именно тремя векторами, то и для камеры применяется 3 вектора: vEye, vAt, vUp //далее
выполняется небольшой пересчет полученных векторов (чтобы камера не оказалась
как бы внутри персонажа)
D3DXMatrixLookAtLH(mxView, vEye, vAt, vUp); //по
данным векторам получаем матрицу вида из камеры
D3DXMatrixPerspectiveFovLH(mxProj, D3DXToRadian(60.0), m_fAspectRatio,
0.1, 100.0); //получаем
проекционную матрицу используя данный угол обзора, соотношение, передний
и задний план
// Set the light direction and normalize //вычисляем
направление источника света путем вычитания vAt - vEye (имеется в виду
вычитание векторов, а не обычное вычитание чисел) Если
Ваши познания в векторной математике незначительны или совсем отсутствуют,
то кое-что можно прочесть в статье Основы
теории векторов
pEffect := m_MultiAnim.GetEffect; //получаем
ссылку на объект эффекта (fx)
// Set the light direction so that the //устанавливаем
направление источника света так, чтобы видимая сторона (элементов моделей
игровой сцены) была освещена
pEffect:= nil; //больше
ссылка на объект эффекта нам не требуется, освобождаем ее
// set the fixed function shader for drawing the floor //используем
фиксированный шейдер
для рисования пола
// draw the floor //рисуем
модель пола с данной текстурой, материалом, положение пола в 3d-пространстве
задаем матрицей m_mxFloor
// draw each tiny //рисуем
персонажей |
||
Итак, в первом приближении Вам должно быть понятно как происходит работа с анимированной моделью с несколькими наборами анимаций | ||
Чтобы лучше уяснить себе работу с анимированными моделями, а заодно и более глубоко исследовать исходный код примера MultiAnimation мы переходим к написанию собственного класса для работы с анимированной моделью, кроме того, такой класс будет полезен не только в учебных целях, но и в любом реальном игровом проекте. | ||
[назад] [далее] [к содержанию] |
Обновления
и новости о развитии Delphi DirectX проекта http://www.megainformaticsite.pochta.ru http://www.megainformatic.boom.ru http://www.megainformatic.narod.ru
|
|||||||||
по всем вопросам пишите на megainformatic@mail.ru или оставьте сообщение на форуме |
|||||||||
Обмен ссылками | |||||||||
|
|||||||||
(с) МЕГА ИНФОРМАТИК 2006-2009 |