Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

//*********************************** ************
Код:
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 в 08:01.
HWork вне форума Ответить с цитированием
Старый 09.03.2010, 12:13   #2
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

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

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

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

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

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

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
анимация shad0w Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 13.12.2020 11:02
анимация serj-07 Общие вопросы Delphi 17 10.01.2010 10:39
анимация в с++ True_girl Помощь студентам 7 01.03.2009 18:57
Анимация BuTeK1 Паскаль, Turbo Pascal, PascalABC.NET 0 19.01.2009 00:30
Анимация Rembo Софт 6 02.12.2007 18:31