Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 09.03.2010, 06:11   #1
HWork
Пользователь
 
Регистрация: 27.07.2009
Сообщений: 27
Репутация: 10
По умолчанию Анимация объектов ?

//*********************************** ************
Код:

MESH_VERT* mvert;

mesh_1->LockVertexBuffer(D3DLOCK_DISCARD,(void**)&mvert);

D3DXMATRIX mxRY;
D3DXMatrixRotationY(&mxRY,0.01f);

D3DXVECTOR4 vec4(0.0f,0.0f,0.0f,1.0f);

for(DWORD i=0;i<8;i++)
{
	vec4.x =mvert[i].pos.x-vec3.x;
	vec4.y =mvert[i].pos.y-vec3.y;
	vec4.z =mvert[i].pos.z-vec3.z;
	vec4.w =1.0f;

	D3DXVec4Transform(&vec4,&vec4,&mxRY);

	mvert[i].pos.x =vec4.x+vec3.x;
	mvert[i].pos.y =vec4.y+vec3.y;
	mvert[i].pos.z =vec4.z+vec3.z;
}

mesh_1->UnlockVertexBuffer();

//*********************************** ************

Таким способом я поворачиваю объект (КУБ) вокруг оси Y. Подскажите в верном ли направлении я двигаюсь, если нет - подскажите способ лучше. (Предполагается что объектов будет много и анимироваться они будут независимо)

Последний раз редактировалось Stilet; 09.03.2010 в 09:01.
HWork вне форума   Ответить с цитированием
Старый 09.03.2010, 13:13   #2
Selestis
Участник клуба
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Адрес: Самара
Сообщений: 719
Репутация: 268
По умолчанию

Вам матрицу нужно установить, а не применять её к каждой вершине. Раз установите - и дальше просто рисуйте готовый объект. Кажется Device.SetTransform(D3DTS_WORLD,&M) , погуглите, материала полно!
Selestis вне форума   Ответить с цитированием
Старый 10.03.2010, 04:51   #3
HWork
Пользователь
 
Регистрация: 27.07.2009
Сообщений: 27
Репутация: 10
По умолчанию

Если "Device.SetTransform(D3DTS_WORLD,&M )" тогда координаты вершин не меняются, прийдется при каждой прорисовки кадра заного применять "Device.SetTransform(D3DTS_WORLD,&M )" чтобы объект был в нужном положении. Например у меня два объекта: каждый из них движется, вращается и т.д., и если первый объект перестает анимироваться, мне всеравно прийдется применять "Device.SetTransform(D3DTS_WORLD,&M )" чтобы он остался в той позиции куда он уже переместился.

Рационально ли это? Напишите, по возможности, как игроделы двигают объекты в своих играх, например, технику в стратегиях.
HWork вне форума   Ответить с цитированием
Старый 11.03.2010, 02:37   #4
Ulex
Непрофессионал
Профессионал
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Адрес: город Н-ск.
Сообщений: 1,411
Репутация: 1100
По умолчанию

Точно не знаю как настоящие игроделы делают, но лично мне не понравилось в вашем методе несколько моментов.

1. Неэкономичное расходование памяти. Например, у нас в игре имеется сто анимированных объектов одного типа - игрок наштамповал сто юнитов. По вашей методике получается, что для каждого юнита в памяти будет храниться свой буфер вершин + может быть индексов. В таком случае выгоднее иметь одну модель и сто матриц, нежели сто моделей и одну матрицу.

2. Очень сомнительна скорость такого метода анимации, если сцена содержит много подвижных и объёмных моделей. Гораздо быстрее посчитать матрицу трансформации и передать её графическому конвееру. И пусть уже аппаратный ускоритель умножает эту матрицу на вершины модели. Хотя лично для меня тут момент есть, всё ещё покрытый тайной - используют ли функции D3DX интерфейса аппаратные возможности GPU ?

И ещё (специалисты меня поправят, если я не прав). Я всегда считал, что стандартный графический конвеер в любом случае будет при рендере умножать вершины на матрицу трансформаций. В таком случае вы вообще двойную работу делаете. Сначала вручную умножаете вершины, а затем ещё и GPU их умножает.
__________________
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума   Ответить с цитированием
Старый 11.03.2010, 13:52   #5
Kostia
Профессионал
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Адрес: Томск
Сообщений: 1,693
Репутация: 615

icq: 426824418
По умолчанию

+1
Объект хранится только одни, один бокс, один юнит. Может он храниться как в видеопамяти, так и в оперативной. И переводя координаты из одной системы координат в другую можно получить перемещение объекта, поворот или масштабирование, главное правильно посчитать матрицу перехода.

А вот сама анимация объекта, движение руки, ноги, это другой вопрос. Самый, на мой взгляд, простой способ, это по ключевым кадрам. Есть модель в нескольких позах и нам нужно трансформировать каждую координату модели. Как бы перемещение из одной точки в другую. И опять же мы не меняем положение вершин самой модели, мы просто их трансформируем(двигаем, поворачиваем, масштабируем систему координат) при выводе модели. И лучше всего это делать через шейдеры.
Вот так...
Kostia вне форума   Ответить с цитированием
Старый 11.03.2010, 23:22   #6
Selestis
Участник клуба
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Адрес: Самара
Сообщений: 719
Репутация: 268
По умолчанию

У автора, насколько я понял, сложных скелетных моделей нет, так что объекты по ключевым кадрам целиком мешами ему не нужно. Вы, HWork, спрашивате, рационально ли каждый кадр задавать transform state. Хотите сказать, что хранить кучу вершин и , более того, каждый кадр их пересчитывать - рационально?))) Почитайте хоть какие-нибудь книжки перед тем, как проги писать. (Есенина, например, там про directx неплохо всё описано, главу по COM можно пропустить) Такие системы, как D3D и созданы для того, чтобы не вам нужно было считать преобразования т растеризацию, а вы пытаетесь, видимо, пойти каким-то другим неведомым путём.. Вобщем, гугл вам в помощь.
Selestis вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
анимация shad0w Assembler 3 15.06.2010 05:19
анимация serj-07 Общие вопросы Delphi 17 10.01.2010 11:39
анимация в с++ True_girl Помощь студентам 7 01.03.2009 19:57
Анимация BuTeK1 Паскаль 0 19.01.2009 01:30
Анимация Rembo Софт 6 02.12.2007 19:31


08:09.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru