forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Комбинация клавиш (http://forum.boolean.name/showthread.php?t=7423)

viper86 11.12.2008 16:07

Ответ: Комбинация клавиш
 
Вложений: 1
Задам ещё один вопрос. Мне тяжело будет его обьяснить, но я попытаюсь.
Когда мы экспортируем анимацию через b3dPipeline, все обьекты являются детями Scene Root. И когда мы используем команды предвижения, вращения и тд, то они применяются к Scene Root. Поэтому, если у нас анимация ходьбы (не на месте, как родной блицевский робот, а с премещением в пространстве), то когда мы запустим анимацию в Блитце, персонаж тоже будет перемещатся в пространстве. Но Scene Root нет, он останется в точке 0,0,0 (естественно, если мы не двигали обьект). И вот что получается: когда анимация заканчивается и мы запускаем другую (или опять эту), то персонаж опять начинает движение с центра, а не там, где закончилась предыдущая анимация. Это потому, что все обьекты привязаны к Scene Root и анимация тоже. Вот и получается, что если зациклить ходьбу, то персонаж будет всё время доходить до определённого места и опять перемещатся в центр. Конешно вы скажете, что нужно сделать анимацию без перемещения в пространстве (как робот блитцевский), и использовать MoveEntity. Но скорость движения тогда будет линейная, а шагают персонажи не линейно. Вы скажете, что можно задать движение по синусоиде (точнее его скорость). Да можно, но это только для ритмичных движений. А для остальных? Особенно со сложной и меняющейся траекторией.

В итоге я хочу, чтобы SCENE ROOT двигался вместе с обьектом, согласно анимации. Тогда и анимация будет нормальная, где законилась предыдущая, там же и следующая начинается. Тогда можно к Scene Root связывать обьекты для коллизий и физики.

Для большей наглядности прикрепляю пример.

moka 12.12.2008 12:19

Ответ: Комбинация клавиш
 
Хм, вообще это изврат, и всёже придётся делать програмное перемещение, но есть небольшая идея:
Если SceneRoot в анимации двигается, ты можешь каждый цикл, двигать сам Entity на ту локальную координату как сместился SceneRoot и двигать SceneRoot обратно в нуль, таким образом ты будешь двигать объект програмно, получая скорость и т.п. из анимации.
Но минусы в этом, то что ты не контролируешь определённую скорость перемещения, и такой варриант полностью зависит от анимации, а этом имхо нехорошо..
Можно сделать чисто программно, а ходьбу сделать на месте, с небольшими перемещениями, эмитируя нелинейность. :)

viper86 12.12.2008 18:14

Ответ: Комбинация клавиш
 
Нет, SceneRoot при анимации на месте. Я тоже сначала хотел каждый цикл ставить SceneRoot на то место, куда сместился персонаж. Но тогда амплитуда движений с каждым циклом увеличивается. Я решил сделать вообще изврат ))). Экспортирую главную кость с анимацией, а потом из анимации с перемещением получаю статическую анимацию. Использую статическую, то есть персонаж ходит на месте. Затем загружаю главную кость с такое же анимацией, одновременно анимирую и персонажа и кость, но задаю каждый цикл, чтоб SceneRoot персонажа следовал координатам главной кости, а по завершению анимации SceneRoot кости ставлю на то место, где находиться SceneRoot персонажа. То есть у меня двигаются всё время 2 обьекта:персонаж и главная кость. И загружаю тоже 2 анимации:статическую для персонажа и с премещением для главной кости. Таким образом я могу использовать и програмную анимацию, и заданную. Я понимаю, этот способ дикий изврат, но по другому не знаю как и анимация получается красивая и с плавными переходами.

2MoKa Спасибо, что делишься идеями и помогаешь ;)


Часовой пояс GMT +4, время: 03:59.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot