Форум

Работа с камерой через API

13 февраля 2017 08:03
Задача: Существует модель с множеством объектов. Камера перемещается по некоторой траектории и "провожает взглядом" ближайший к ней объект, а как только находится другой объект, который является ближайшим, поворачивается в его сторону и так же "провожает взглядом". При этом камера перемещается и не снижает скорость. Весь полет никак не контролируется пользователем через браузер.

Вопросы:
1) Какой режим использовать для выполнения единовременно обоих типов анимаций
2) Как перемещать камеру, если исключить перемещение через empty объекты? Т.е. какие варианты построения траектории существуют?
3) Как выполнить анимацию "смотреть на объект, пока он ближайший". (! Самый проблемный вопрос)

Я человек начинающий и буду рада любой помощи :) Спасибо за Ваше внимание!
21 февраля 2017 12:10
Добрый день!

1) Какой режим использовать для выполнения единовременно обоих типов анимаций
Проще всего target камеру, так как при анимации движения ее направление ее "взгляда" будет автоматически корректироваться на заданный целевой объект. Т.е. задача "смотреть на объект, пока он ближайший" сведется только к определению ближайшего объекта и передаче егов настройки камеры.
Можно так же через static или eye камеру, но тогда таргетирование/поворот нужно будет расчитывать вручную, в чем нет особого смысла

2) Как перемещать камеру, если исключить перемещение через empty объекты? Т.е. какие варианты построения траектории существуют?
a) В blend4web поддерживается как стандартная объектная анимация блендера так и NLA. Процесс подготовки такой анимации полностью соответствует стандартному процессу создания анимации в Blender + доп. настройки проигрывания анимации в b4w сцене + возможность управлять анимацией через API методы модуля animation
б) Перемещение камеры можно анимировать процедурно: code snippet из SDK
3) Как выполнить анимацию "смотреть на объект, пока он ближайший". (! Самый проблемный вопрос)
Расстояние от камеры до объекта можно легко определить с помощью метода distance из модуля transform следующим образом:
 var cam = m_scenes.get_active_camera();
 var target = m_scenes.get_object_by_name("TARGET_OBJECT");
 var dist = m_trans.distance(cam, target);

Для смены целевой точки (центра вращения) target камеры можно использовать метод m_cam.target_set_trans_pivot(cam, null, target_translation)
Примеры использование этого и пр. методов так же можно найти в код сниппете из предыдущего пункта.
+ дополнительные полезные функции для процедурной анимации камеры можно найти в модуле camera_animation.
Команда Blend4Web - разработчик
Twitter
LinkedIn
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.