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

27 января 2016 08:53 #6824
Ответ на сообщение пользователя Семенцов Роман
Если вы про управление камерой на мобильном девайсе, то эти алгоритмы заложены в аддона 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 #6826

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

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

Опять же, вся логика управления камерой находится в аддоне app.js
Разработчик Blend4Web
27 января 2016 13:50 #6844
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 #6847
Не заработал. Выдал такие ошибки
В каком месте вызывается m_app.enable_camera_controls? Судя по ошибкам - слишком рано во время загрузки, когда ещё не обработалась главная сцена.
Команда Blend4Web
27 января 2016 16:21 #6853

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

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

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

Проверил на iPad - работает норм, разве что надо подобрать под себя скорость вращения камеры. Делается это через объявленные константы. Да и надо проверять насколько мы опустили камеру, а не то можно попасть под землю камерой.
Разработчик Blend4Web
27 января 2016 16:23 #6854
Кстати по поводу ошибок из консоли, вызывайте функцию
m_app.enable_camera_controls()
в момент load_cb. Ей нужна камера, чтобы навесить на нее сенсоры. А камера доступна, когда уже загружена сцена
Разработчик Blend4Web
27 января 2016 21:14 #6875
Здравствуйте, есть ли возможность сделать дубликаты подгруженных сцен. Подгружаю элементы через 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 #6877
Ответ на сообщение пользователя Семенцов Роман
Посмотрите как просто выглядит пример для декстопа.

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

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

в момент load_cb. Ей нужна камера, чтобы навесить на нее сенсоры. А камера доступна, когда уже загружена сцена
Спасибо, попробую и так. Действительно поставил вызов этой функции перед инициализацией сцены. Рядом, с функцией m_app.enable_controls(), просто потому что из одного модуля, и названия почти схожи.
Не стой, где попало… Попадет еще раз.
http://naviris.ru/
28 января 2016 07:47 #6880
Ответ на сообщение пользователя 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.
Разработчик Blend4Web
28 января 2016 09:10 #6882
Хм, теперь появилась проблемка с мультитачем. Пока зажата кнопка направления движения (touchstart) b4w игнорирует жесты управления камерой. После отжатия кнопки (touchend) жесты продолжают работать.
видео
Сегодня буду изучать логику событий тачей
Не стой, где попало… Попадет еще раз.
http://naviris.ru/
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.