Форум

* Как? Вращение источника света типа SPOT вокруг объекта в сцене с данными от гироскопа (как гиро-камера)?

24 июля 2016 22:49 #10710
Как сделать подскажите?

Необходимо вращение источника света типа SPOT вокруг объекта ( навправление света всегда в одну точку( например 0.0.0 или пивот объекта в сцене) с данными для вращения от гироскопа, как реализовано гиро-камере в соответсвующем модуле . я так понимаю данные от гироскопа с тем модулем работают только с камерой?
https://www.blend4web.com/api_doc/module-gyroscope.html

PS
данные для перемещения центра источника света для перемещения по уруговой орбите не проблема..
вопрос именно как связать их в рамках b4w с источником, кроме того я не нашел такого свойства как TARGET у SPOT в b4W ((( ….
как задавать направление на точку или объект как например это есть в THREE.JS )) ?

Спасибо заранее за развернутые ответы.
Денис
25 июля 2016 15:19 #10741
вот про это бы еще кто подсказал.. очень хочу доделать приложение до к . месяца
как раз к релизу )))
Денис
25 июля 2016 16:23 #10747
вопрос именно как связать их в рамках b4w с источником

для этого можно воспользоваться методом set_translation, либо set_translation_v, например:

var lamp = m_scenes.get_object_by_name("Lamp");
m_trans.set_translation(lamp, 1, 2, 3);


я не нашел такого свойства как TARGET у SPOT в b4W
а его и нет , в вашем случае фиксированной точки подойдет метод append_track - первым параметром подаете лампочку, а вторым - объект, на который она всегда будет смотреть (точнее на центр объекта, для простоты можно добавить empty-объект в нужной точке и использовать его при вызове функции):

var lamp = m_scenes.get_object_by_name("Lamp");
var empty = m_scenes.get_object_by_name("Empty");
m_cons.append_track(lamp, empty);


я так понимаю данные от гироскопа с тем модулем работают только с камерой
да, это аддон, поэтому там специфический функционал только для камеры, но можно сделать по аналогии:

// создаем сенсор, отслеживающий углы гироскопа
var g_a_sensor = m_ctl.create_gyro_angles_sensor();

// задаем логику его обработки
m_ctl.create_sensor_manifold(lamp, "ROTATE_GYRO", m_ctl.CT_CONTINUOUS, [g_a_sensor], null, rotate_cb);

// функция-обработчик 
var rotate_cb = function(obj, id, pulse) {

    // берем углы гироскопа
    _curr_angles = m_ctl.get_sensor_payload(obj, id, 0);

    // рассчитываем положение лампы
    // var x = ?, y = ?, z = ?;
    // m_trans.set_translation(lamp, x, y, z);
}

Там могут быть проблемы с текущей ориентацией устройства, но, возможно, в вашем случае это непринципиально.
Команда Blend4Web
25 июля 2016 16:34 #10749
ВОТ Спаисбо.. буду пробовать .. про ТАРГЕТ у спота не понятно по какой причине его нет.. по идее он и в блендре и в других редакторах всегда присутсвует
Денис
25 июля 2016 16:35 #10750
Думаю, что вы можете воспользоваться модулем input и transform для своих целей.

// получаем объект, соответствующий гироскопу
var gyro_device = m_input.get_device_by_type(m_input.DEVICE_GYRO)
m_input.attach_param_cb(gyro_device, m_input.GYRO_ORIENTATION_QUAT, function(quat) {
    // где quat -- актуальный кватернион поворота, который пришёл с гироскопа
    // пишем здесь логику перемещения лампочки, см. ниже
})


как задавать направление на точку или объект
Можно отталкиватся от какого-нибудь вектора, например m_util.AXIS_Y (в зависимости от того, какое поведение требуется), и вращать его в соответствии с кватернионом quat (m_vec3.transformQuat), полученный вектор (дополнительно преобразовывать в зависимости от того, какое поведение требуется) использовать в качестве позиции лампочки (m_trans.set_translation_v), а кватернион использовать в качестве ориентации лампочки (m_trans.set_rotation_v).

Возможно, вам будет полезен следующее сообщение: https://www.blend4web.com/ru/forums/topic/2013/?page=1#post-10020
Команда Blend4Web
kirill@blend4web.com
25 июля 2016 17:25 #10752
про ТАРГЕТ у спота не понятно по какой причине его нет.. по идее он и в блендре и в других редакторах всегда присутсвует
в блендере у лампочки есть поворот, как и у любого другого объекта - он уже определяет направление конуса света, поэтому таргет в качестве свойства лампы был бы избыточен

если вы о констрейнтах, например, Track To, то он у нас не поддерживается

var gyro_device = m_input.get_device_by_type(m_input.DEVICE_GYRO)
m_input.attach_param_cb(gyro_device, m_input.GYRO_ORIENTATION_QUAT, function(quat) {
// где quat – актуальный кватернион поворота, который пришёл с гироскопа
// пишем здесь логику перемещения лампочки, см. ниже
})
- этот вариант даже, наверное, попроще будет, чем через сенсоры, можно ещё m_input.GYRO_ORIENTATION_QUAT заменить на m_input.GYRO_ORIENTATION_ANGLES, тогда в обработчик будут приходить эйлеровские углы, смотря, что удобнее
Команда Blend4Web
25 июля 2016 18:55 #10756
Ответ на сообщение пользователя Иван Любовников
….
в блендере у лампочки есть поворот, как и у любого другого объекта - он уже определяет направление конуса света, поэтому таргет в качестве свойства лампы был бы избыточен
….

нет, я не о этом,
пример моеговарианта Луна и Земля, луна это СПОТ смотрит на центр земли и вращается вокруг земли , его расположение опледелается координатами XYZ и куда бы не переместили луну она всегда смотрит на X0 Y0 Z0 точку..

движение по ордите вообщем + ориентация на точку.

в Трии это организовывается очень просто , сначала говрим свет.таргет = XYZ или объект , затем просто меняем место света и привет )) зачем его вращать ориентировать итд… вот я о чем

более правильные вариант с учетом смены положения источника света в 3х плоскостях:
так вот место расположение берем по гироскопу определять.. за нулевую точку берем положение гироскопа в плоскости и свет в зените в этот момент, далее уже надо сохранять положение света ка буд то он относительно мира не меняется, а вот меш аклоняется и поворачивается(только вместо этого перемещать источник света по сферической орбите)

как то запутанно получилось написать , но вроде понятно?

пока для теста привязал ( как к родителю) свет к одной из стрелок которая вращается.. все ок и с направлением и с положением.. это про то как к пустому объекту првязать выше написано было
Денис
25 июля 2016 19:34 #10760
ример моеговарианта Луна и Земля, луна это СПОТ смотрит на центр земли и вращается вокруг земли , его расположение опледелается координатами XYZ и куда бы не переместили луну она всегда смотрит на X0 Y0 Z0 точку..
Не много не в тему, но всё же…
А почему для луны нельзя использовать точечный источник света? Зачем именно spot?
Не стой, где попало… Попадет еще раз.
http://naviris.ru/
25 июля 2016 19:58 #10761
Ответ на сообщение пользователя Кирилл
Не много не в тему, но всё же…
А почему для луны нельзя использовать точечный источник света? Зачем именно spot?

потому как с тенями большие проблемы на этом устройстве и на споте удалось все получить почти как надо .. не хочу больше эксперементировать ((
Денис
26 июля 2016 18:12 #10769
А почему для луны нельзя использовать точечный источник света?

а чем к стати он так лучше спота?
в нем тоже нет таргета
Денис
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.