|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.03.2010, 05:11 | #1 |
Пользователь
Регистрация: 27.07.2009
Сообщений: 27
|
Анимация объектов ?
//*********************************** ************
Код:
Таким способом я поворачиваю объект (КУБ) вокруг оси Y. Подскажите в верном ли направлении я двигаюсь, если нет - подскажите способ лучше. (Предполагается что объектов будет много и анимироваться они будут независимо) Последний раз редактировалось Stilet; 09.03.2010 в 08:01. |
09.03.2010, 12:13 | #2 |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
Вам матрицу нужно установить, а не применять её к каждой вершине. Раз установите - и дальше просто рисуйте готовый объект. Кажется Device.SetTransform(D3DTS_WORLD,&M) , погуглите, материала полно!
Изобретатель велосипедов
|
10.03.2010, 03:51 | #3 |
Пользователь
Регистрация: 27.07.2009
Сообщений: 27
|
Если "Device.SetTransform(D3DTS_WORLD,&M )" тогда координаты вершин не меняются, прийдется при каждой прорисовки кадра заного применять "Device.SetTransform(D3DTS_WORLD,&M )" чтобы объект был в нужном положении. Например у меня два объекта: каждый из них движется, вращается и т.д., и если первый объект перестает анимироваться, мне всеравно прийдется применять "Device.SetTransform(D3DTS_WORLD,&M )" чтобы он остался в той позиции куда он уже переместился.
Рационально ли это? Напишите, по возможности, как игроделы двигают объекты в своих играх, например, технику в стратегиях. |
11.03.2010, 01:37 | #4 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Точно не знаю как настоящие игроделы делают, но лично мне не понравилось в вашем методе несколько моментов.
1. Неэкономичное расходование памяти. Например, у нас в игре имеется сто анимированных объектов одного типа - игрок наштамповал сто юнитов. По вашей методике получается, что для каждого юнита в памяти будет храниться свой буфер вершин + может быть индексов. В таком случае выгоднее иметь одну модель и сто матриц, нежели сто моделей и одну матрицу. 2. Очень сомнительна скорость такого метода анимации, если сцена содержит много подвижных и объёмных моделей. Гораздо быстрее посчитать матрицу трансформации и передать её графическому конвееру. И пусть уже аппаратный ускоритель умножает эту матрицу на вершины модели. Хотя лично для меня тут момент есть, всё ещё покрытый тайной - используют ли функции D3DX интерфейса аппаратные возможности GPU ? И ещё (специалисты меня поправят, если я не прав). Я всегда считал, что стандартный графический конвеер в любом случае будет при рендере умножать вершины на матрицу трансформаций. В таком случае вы вообще двойную работу делаете. Сначала вручную умножаете вершины, а затем ещё и GPU их умножает.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
11.03.2010, 12:52 | #5 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
+1
Объект хранится только одни, один бокс, один юнит. Может он храниться как в видеопамяти, так и в оперативной. И переводя координаты из одной системы координат в другую можно получить перемещение объекта, поворот или масштабирование, главное правильно посчитать матрицу перехода. А вот сама анимация объекта, движение руки, ноги, это другой вопрос. Самый, на мой взгляд, простой способ, это по ключевым кадрам. Есть модель в нескольких позах и нам нужно трансформировать каждую координату модели. Как бы перемещение из одной точки в другую. И опять же мы не меняем положение вершин самой модели, мы просто их трансформируем(двигаем, поворачиваем, масштабируем систему координат) при выводе модели. И лучше всего это делать через шейдеры. Вот так... |
11.03.2010, 22:22 | #6 |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
У автора, насколько я понял, сложных скелетных моделей нет, так что объекты по ключевым кадрам целиком мешами ему не нужно. Вы, HWork, спрашивате, рационально ли каждый кадр задавать transform state. Хотите сказать, что хранить кучу вершин и , более того, каждый кадр их пересчитывать - рационально?))) Почитайте хоть какие-нибудь книжки перед тем, как проги писать. (Есенина, например, там про directx неплохо всё описано, главу по COM можно пропустить) Такие системы, как D3D и созданы для того, чтобы не вам нужно было считать преобразования т растеризацию, а вы пытаетесь, видимо, пойти каким-то другим неведомым путём.. Вобщем, гугл вам в помощь.
Изобретатель велосипедов
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
анимация | 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 |