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

27 января 2016 08:53
Ответ на сообщение пользователя Семенцов Роман
Если вы про управление камерой на мобильном девайсе, то эти алгоритмы заложены в аддона app.js. Вас должны интересовать функции, в названии которых есть слово touch. Обработчики у нас там реализованы через сенсоры модуля controls.js

Надеюсь, я правильно понял ваш вопрос

Вы меня правильно поняли, смотрел в доки и в исходники по слову Touch. Пробовал разобраться, но пока не вышло. В итоге пока что набросал такую конструкцию:
    //События тача
    var camobj = m_scs.get_active_camera();
    var touchmove_sensor_x = m_ctl.create_touch_move_sensor('X');
    var touchmove_sensor_y = m_ctl.create_touch_move_sensor('Y');
    var touchmove_sensor_xy = m_ctl.create_touch_move_sensor();

    var coord_touch = {x:0,y:0};
    m_ctl.create_sensor_manifold(null, "TOUCH_MOVE", m_ctl.CT_LEVEL, [touchmove_sensor_xy, touchmove_sensor_x, touchmove_sensor_y],
            function(s){
                coord_touch.x = s[1];
                coord_touch.y = s[2];
                return s[0];
            }, sobitie_touch);   

    function sobitie_touch(obj, id, pulse, param) {
    console.log({coord_touch_x:coord_touch.x ,coord_touch_y:coord_touch.y});
        m_cam.rotate_eye_camera(camobj, coord_touch.x/(-500), coord_touch.y/(-500));
    }

Не стой, где попало… Попадет еще раз.
http://naviris.ru/
27 января 2016 10:06

Пробовал разобраться, но пока не вышло.

Расскажите лучше про вашу задачу. Каким именно образом вы хотите двигать камеру по событиям тача.
У нас обработчики события навешиваются в момент, когда вы вызываете m_app.enable_camera_controls
Затем на объект камеры навешивается множество сенсоров на разные события мыши и тача. В каждом обработчике проверяется какой тип камеры мы используем и вычисляем перемещение камеры и записываем его в переменные (к примеру для тача мы записываем в dest_x_touch и dest_y_touch). А затем в другом сенсоре смотрим на все эти переменные и смещаем камеру. Примерно так.

Опять же, вся логика управления камерой находится в аддоне app.js
27 января 2016 13:50
m_app.enable_camera_controls
Не заработал. Выдал такие ошибки
b4w.min.js:324 B4W ERROR: No active scened @ b4w.min.js:324a.get_active_camera @ b4w.min.js:1987u @ b4w.min.js:2049init_cb @ example.js:31e @ b4w.min.js:2063
b4w.min.js:324 B4W ERROR: get_move_style(): Wrong camera objectd @ b4w.min.js:324a.get_move_style @ b4w.min.js:1890u @ b4w.min.js:2049init_cb @ example.js:31e @ b4w.min.js:2063
b4w.min.js:324 B4W ERROR: get_velocities(): Wrong camera object

Пробовал функцию на этом примере
Если подкините пример кода для реализации поворта камеры вместе с направлением персонажа тачем (что бы после поворота камеры он продолжал идти прямо при нажатии кнопки W) этого примера, буду очень признателен. А пока что пользуюсь сенсорами touch_move.
Не стой, где попало… Попадет еще раз.
http://naviris.ru/
27 января 2016 14:59
Не заработал. Выдал такие ошибки
В каком месте вызывается m_app.enable_camera_controls? Судя по ошибкам - слишком рано во время загрузки, когда ещё не обработалась главная сцена.
27 января 2016 16:21

Если подкините пример кода для реализации поворта камеры вместе с направлением персонажа тачем (что бы после поворота камеры он продолжал идти прямо при нажатии кнопки W) этого примера, буду очень признателен. А пока что пользуюсь сенсорами touch_move.

У нас есть для поинтерлока rotation_cb, куда можно передать функцию поворота персонажа. Если нет поинтерлока, но есть мышка, то можно использовать request_mouse_drag. Но эти варианты для мобильника не подходят, и надеюсь в будущем мы поправим это.
Посмотрите как просто выглядит пример для декстопа.

Для мобильника пришлось повозиться. Вот пример сырой версии, подойдет в качестве отправной точки для создания своего обработчика тача: test.zip

Проверил на iPad - работает норм, разве что надо подобрать под себя скорость вращения камеры. Делается это через объявленные константы. Да и надо проверять насколько мы опустили камеру, а не то можно попасть под землю камерой.
27 января 2016 16:23
Кстати по поводу ошибок из консоли, вызывайте функцию
m_app.enable_camera_controls()
в момент load_cb. Ей нужна камера, чтобы навесить на нее сенсоры. А камера доступна, когда уже загружена сцена
27 января 2016 21:14
Здравствуйте, есть ли возможность сделать дубликаты подгруженных сцен. Подгружаю элементы через data.load , если написать в коде пару раз подряд, то инициализация сцены происходит очень долго
data.load('model.json',loaded_cb,preloader_cb)
data.load('model.json',loaded_cb,preloader_cb)
data.load('model.json',loaded_cb,preloader_cb)
data.load('model.json',loaded_cb,preloader_cb)
data.load('model.json',loaded_cb,preloader_cb)
28 января 2016 00:43
Ответ на сообщение пользователя Семенцов Роман
Посмотрите как просто выглядит пример для декстопа.

Для мобильника пришлось повозиться. Вот пример сырой версии, подойдет в качестве отправной точки для создания своего обработчика тача: test.zip
Большое спасибо! Изучил, попробовал связать поинтерлок и приведённый обработчик тача в один проект, пока что получилось не очень по горизонтали. По вертикали вроде хорошо работает. Осталось сделать грамотное ветвление обработки мыши/тача на свежую голову
Разобрался! Ещё раз спасибо за приведённые примеры, теперь всё работает как задумано

Ответ на сообщение пользователя Семенцов Роман
Кстати по поводу ошибок из консоли, вызывайте функцию
m_app.enable_camera_controls()

в момент load_cb. Ей нужна камера, чтобы навесить на нее сенсоры. А камера доступна, когда уже загружена сцена
Спасибо, попробую и так. Действительно поставил вызов этой функции перед инициализацией сцены. Рядом, с функцией m_app.enable_controls(), просто потому что из одного модуля, и названия почти схожи.
Не стой, где попало… Попадет еще раз.
http://naviris.ru/
28 января 2016 07:47
Ответ на сообщение пользователя Onis
Здравствуйте, есть ли возможность сделать дубликаты подгруженных сцен. Подгружаю элементы через data.load , если написать в коде пару раз подряд, то инициализация сцены происходит очень долго
data.load('model.json',loaded_cb,preloader_cb)
data.load('model.json',loaded_cb,preloader_cb)
data.load('model.json',loaded_cb,preloader_cb)
data.load('model.json',loaded_cb,preloader_cb)
data.load('model.json',loaded_cb,preloader_cb)
Добрый день,
Да, такая возможность есть. Для этого имеется функция objects.copy(obj, name, deep_copy), которая создает копию существующего объекта. Если вы в дальнейшем хотите независимо изменять геометрию/материалы скопированных объектов, то последний флаг deep_copy следует выставить в true.

Пример её применения есть в Code Snippets.
28 января 2016 09:10
Хм, теперь появилась проблемка с мультитачем. Пока зажата кнопка направления движения (touchstart) b4w игнорирует жесты управления камерой. После отжатия кнопки (touchend) жесты продолжают работать.
видео
Сегодня буду изучать логику событий тачей
Не стой, где попало… Попадет еще раз.
http://naviris.ru/
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.