Вопрос - ответ

29 июня 2017 14:55
нужно со смещением, камера находится в отдалении от пустышки.
29 июня 2017 17:57
Ответ на сообщение пользователя AngryArcticFox
нужно со смещением, камера находится в отдалении от пустышки.
при активации стиф_транса камера сама ползет на координаты. В функцию подаются координаты смещения от объекта-актора.
Коплю деньги на коммерческий B4W.
29 июня 2017 18:55
Для этого нужно вычесть из координат камеры координаты пустышки? Как найти их координаты?
Если нужно использовать текущее смещение между камерой и пустышкой, то можно вот так:

var _vec3_tmp = new Float32Array(3);
var _vec3_tmp2 = new Float32Array(3);
var _vec3_tmp3 = new Float32Array(3);

var cam_trans = m_trans.get_translation(cam_obj, _vec3_tmp);
var empty_trans = m_trans.get_translation(empty_obj, _vec3_tmp2);
var result_vec = m_vec3.subtract(cam_trans, empty_trans, _vec3_tmp3);
Команда Blend4Web
29 июня 2017 20:22
Ответ на сообщение пользователя AngryArcticFox
нужно со смещением, камера находится в отдалении от пустышки.
Я видимо не понял с недосыпа)))
Коплю деньги на коммерческий B4W.
30 июня 2017 21:06
Ответ на сообщение пользователя Иван Любовников
Если нужно использовать текущее смещение между камерой и пустышкой, то можно вот так:

Иван, спасибо в очередной раз. К сожалению результат все равно непредсказуем:( Я не понимаю, что происходит и как это работает:) Если не трудно, взгляните на сцену. Камера прыгает когда срабатывает
append_stiff_trans_rot
и в дальнейшем при анимации скачет туда-сюда. Меня не покидает ощущение, что можно сделать все гораздо проще.

Экспортированный проект в приложении к сообщению.

В начале камера летает, закрепленная за пустышкой. При нажатии клавиши мыши связь разрывается и если ничего не делать, то через 3 секунды связь должна восстановиться, но происходит это очень странно.
06 июля 2017 19:25
Иван, спасибо в очередной раз. К сожалению результат все равно непредсказуем:( Я не понимаю, что происходит и как это работает:) Если не трудно, взгляните на сцену. Камера прыгает когда срабатывает
append_stiff_trans_rot
и в дальнейшем при анимации скачет туда-сюда.
По append_stiff_trans_rot камера прыгает т.к. после разрыва связи она останавливается (ну или крутится пользователем), а пустышка продолжает двигаться, поэтому потом при привязке у них будет разница в повороте т.е. рассинхрон. Надо будет ещё параметр rotation_offset использовать, чтобы это учесть. Почему дальше ломается, пока не ясно, похоже на баг констрейнтов, будем разбираться.

Меня не покидает ощущение, что можно сделать все гораздо проще.
Тут зависит от конкретной задачи. Вариант с анимированной пустышкой неплох - можно довольно легко заанимировать какую-угодно траекторию в Блендере и не париться, но можно ещё и крутить камеру вручную процедурно, например, методом camera_anim.rotate_camera, правда придется определять траекторию/углы самому в коде. А можно вообще через camera_anim.auto_rotate, только там будет крутиться только в одной плоскости.
Вообщем, завтра постараюсь подробнее посмотреть, что здесь может подойти.
Команда Blend4Web
08 июля 2017 00:59
А какая сейчас версия доступна для скачивания то?

10 июля 2017 12:00
А какая сейчас версия доступна для скачивания то?
Обновление 17.06.1 скоро появится, а это - пока что косяк документации.
Команда Blend4Web
10 июля 2017 12:15
В начале камера летает, закрепленная за пустышкой. При нажатии клавиши мыши связь разрывается и если ничего не делать, то через 3 секунды связь должна восстановиться, но происходит это очень странно.
Вообщем, разобрались, в движке есть баги, но следующий код позволяет их избежать:

function mouse_up_cb() {
    var _vec3_tmp = new Float32Array(3);
    var _vec4_tmp = new Float32Array(4);
    var _vec4_tmp2 = new Float32Array(4);
    var _vec4_tmp3 = new Float32Array(4);

    var timeout_id = setTimeout(function(){
        var cam_trans = m_trans.get_translation(cam, _vec3_tmp);
        var rotator_tsr = m_trans.get_tsr(cam_rotator);
        var offset = m_tsr.transform_vec3_inv(cam_trans, rotator_tsr, cam_trans);
                    
        var cam_quat = m_trans.get_rotation(cam, _vec4_tmp);
        var empty_quat = m_trans.get_rotation(cam_rotator, _vec4_tmp2);
        m_quat.invert(empty_quat, empty_quat);
        var rot_offset = m_quat.multiply(empty_quat, cam_quat, _vec4_tmp3);

        m_const.append_stiff_trans_rot(cam, cam_rotator, offset, rot_offset);
    }, 3000);
}

- если вкратце, то нужно выставить ещё и rotation_offset - это устранит дергание камеры.
Команда Blend4Web
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.