Forum

User posts crantisz
01 September 2017 15:30
Ответ на сообщение пользователя Юрий Ковеленов
Камера типа TARGET вращается вокруг точки в 3D пространстве. Вы можете изменять координаты этой точки в настройках камеры Target Location.

Это понятно, что камера вращается вокруг определенной точки, называемой pivot. У нее есть 3 координаты в сцене - Scene X, Scene Y и Scene Z, и в тоже самое время можно сказать, что у нее есть координаты в плоскости HTML-canvas: canvas X и canvas Y, и как я понимаю, они равны 50% и 50%.

Проблемы задать Scene X, Scene Y и Scene Z - не возникает.
Не известно как задать именно canvas X и canvas Y
01 September 2017 13:19
Требуется фиксировать за каждым пользователем статус сообщений, а это значит что требуется сохранение информации о пользователях в базе.
Все делается гораздо проще. Сохраняется в базе время предыдущего визита. А в текущем визите используем куки. Допустим, я зашел на сайт после 3х дневного перерыва. Сообщения 3дня назад и ранее - не новые. Сообщения в куках (и не обновлены позже чем указано в куках) - не новые. Остальное - отмечаем как новое. Так делается в большинстве форумных движков.

Чем они отличаются от visited в контексте данного решения?
тем, что можно увидеть, что в ранее посещенном топике появилось новое сообщение.
01 September 2017 13:08
Заметил, что параметр shift у камеры не поддерживается:

Есть ли какой-либо другой способ сместить центр камеры? На данный момент, камера в режиме TAGET вращается таким образом, что виртуальный pivot камеры всегда совпадает с центром canvas. А мне нужно указать конкретные координаты на canvas, где должен находится pivot. Т.е. фактически сдвинуть изображение в canvas в сторону, не изменяя ничего в самой сцене и камере:


Желательно сделать это с помощью JS, чтобы при необходимости реагировать на изменения ориентации устройства.
01 September 2017 11:50
Спасибо, работает
01 September 2017 11:20
Написал функцию, делающую плавное приближение камеры к объекту. Камера в режиме TARGET. Выглядит это примерно так:
function zoom( distance, time){
  var cam_obj = m_scenes.get_active_camera();
  var current_distance = m_cam.target_get_distance(cam_obj);
....
  m_time.animate(0, 1.0, time, function(e) { 
...
        var delta_distance=(distance-current_distance)*e+current_distance
        m_cam.target_set_distance(cam_obj,delta_distance);

Проблема в том, что периодически (не понятно от чего зависит) приближение выполняется не плавно, а с поддергиванием (Почти всегда, в большей или меньшей степени). С функцией rotate_camera() модуля camera а так-же target_set_pivot_translation() таких проблем нет.

Отчего это происходит и как можно исправить?
01 September 2017 11:03
Не получилось воспользоваться функцией rotate_camera. Поведение показалось странным,
поэтому попробовал заглянуть в исходный код, чтобы разобраться:

На сколько я понял, тут какая-то ошибка, поскольку, 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);
01 September 2017 10:20
Т.е. как я понял, нужно в исходном коде писать функцию, которая будет менять это значение?
29 August 2017 11:53
Камера в режиме TAGET. При вращении камеры в веб-плеере есть едва заметное сглаживание или запаздывание. Как можно настроить сглаживание при вращении камеры пользователем, и при необходимости отключить его, или, наоборот, сделать более заметным? Как сделать это на JS? Например, если это мобильное устройство, отключить его совсем?