Форум

Урок по программированию перемещения объектов

02 августа 2016 16:18
Андрей Прахов написал урок, который наверняка очень поможет новичкам в написании приложений на Blend4Web. Если вам не совсем очевидно, как оживить и заставить двигаться объекты с помощью программного кода, вам обязательно стоит обратить на него внимание.

Ссылка на урок.
28 июля 2017 15:22
Добрый день,

Статья хорошая. Использовал ее в своем обучении. Но у меня есть вопрос. Где можно прочитать про все углы, измерения про вращения? Всякие кватернионы, радианы, градусы и то, что в Blender.
А как получить градус поворота объекта? Разницу между двумя значениями по кватернионам? А еще выполнить плавное вращения объекта по кватернионам. Углы в начале не 60 градусов, как в документации о Кватернионах, а случайные.

Спасибо.
01 августа 2017 12:13
Здравствуйте,

Где можно прочитать про все углы, измерения про вращения? Всякие кватернионы, радианы, градусы и то, что в Blender.
- сейчас информация об этом есть, пожалуй, только в разделе про кватернионы, на который вы ссылаетесь.
Вообще, в движке здесь 2 принципа: для вращений использовать кватернионы, а углы представлять в радианах - API также на этом завязано. Если вращение нужно получить в другой форме, то можно использовать специальные методы для преобразования, например: util.quat_to_euler и util.euler_to_quat для перевода кватернионов в углы Эйлера и наоборот, также util.rad_to_deg и util.deg_to_rad для перевода из радианов в градусы.
А как получить градус поворота объекта?
Вот как-то так:
var m_trans = require("transform");
var m_util = require("util");

var quat = m_trans.get_rotation(my_obj);
var euler = m_util.quat_to_euler(quat);
var x = m_util.rad_to_deg(euler[0]);
var y = m_util.rad_to_deg(euler[1]);
var z = m_util.rad_to_deg(euler[2]);


Разницу между двумя значениями по кватернионам?
Тут надо перемножить кватернион на обратный второго:
var m_quat = require("quat");

// quat1 - quat2
var quat_diff = m_quat.mul(quat1, m_quat.invert(quat2, quat2));


А еще выполнить плавное вращения объекта по кватернионам.
Есть функция quat.slerp для интерполяции кватернионов - её можно использовать анимируя входной параметр t от 0 до 1:
var m_time = require("time");
var m_quat = require("quat");

// в течение 5 сек.
m_time.animate(0, 1, 5000, function(value) {
    m_quat.slerp(quat1, quat2, value, res_quat);
    m_trans.set_rotation_v(my_obj, res_quat);
});


Вообще для проведения различных преобразований есть много полезных методов в модулях vec3/vec4/mat3/mat4/quat - это по сути популярная библиотека glMatrix.
01 августа 2017 22:18
Вот это ответ

Мне бы так преподы в универе инфу толкали, не прогуливал бы лекции)
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.