Странный функционал у rotate_camera
01 сентября 2017 11:03
Не получилось воспользоваться функцией rotate_camera. Поведение показалось странным,
поэтому попробовал заглянуть в исходный код, чтобы разобраться:
На сколько я понял, тут какая-то ошибка, поскольку, delta_phi и delta_theta получаются одинаковыми числами:
В результате камера может поворачиваться только вертикально, горизонтально или под углом 45 градусов:
поэтому попробовал заглянуть в исходный код, чтобы разобраться:
На сколько я понял, тут какая-то ошибка, поскольку, delta_phi и delta_theta получаются одинаковыми числами:
var delta_phi = 0;
var delta_theta = 0;
..
var cur_animator = m_time.animate(0, angle, time, function(e) {
...
delta_phi -= e;
delta_theta -= e;
В результате камера может поворачиваться только вертикально, горизонтально или под углом 45 градусов:
if (angle_theta && angle_phi)
m_cam.rotate_camera(cam_obj, delta_phi, delta_theta); //delta_phi=delta_theta
else if (angle_theta)
m_cam.rotate_camera(cam_obj, 0, delta_theta);
else if (angle_phi)
m_cam.rotate_camera(cam_obj, delta_phi, 0);
05 сентября 2017 14:18
05 сентября 2017 16:03
Будет исправлено в следующем релизе.
Проблему можно решить заменой функции rotate_camera на следующую:
Проблему можно решить заменой функции rotate_camera на следующую:
exports.rotate_camera = function(cam_obj, angle_phi, angle_theta, time, cb) {
if (m_cam.get_move_style(cam_obj) == m_cam.MS_STATIC) {
m_print.error("rotate_camera(): not supported for STATIC cameras");
return;
}
if (_is_camera_rotating)
return;
if (!cam_obj) {
m_print.error("rotate_camera(): you must specify the camera object");
return;
}
if (!angle_phi && !angle_theta) {
m_print.error("rotate_camera(): you must specify the rotation angle");
return;
}
time = time || DEFAULT_CAM_ROTATE_TIME;
_is_camera_rotating = true;
function fin_cb() {
if (_is_camera_rotating) {
_is_camera_rotating == false;
if (cb)
cb();
}
}
var delta_phi = 0;
var cur_animator_phi = m_time.animate(0, angle_phi, time, function(e) {
m_cam.rotate_camera(cam_obj, delta_phi - e, 0);
delta_phi = e;
if (e >= angle_phi) {
m_time.clear_animation(cur_animator_phi);
fin_cb();
}
});
var delta_theta = 0;
var cur_animator_theta = m_time.animate(0, angle_theta, time, function(e) {
m_cam.rotate_camera(cam_obj, 0, delta_theta - e);
delta_theta = e;
if (e >= angle_theta) {
m_time.clear_animation(cur_animator_theta);
fin_cb();
}
});
}
Команда Blend4Web
kirill@blend4web.com
kirill@blend4web.com