не ищутся объекты в сцене m_scenes.get_object_by_name("object_target");

03 марта 2018 21:10
Вчера обнаружен еше один "99% баг" : при загрузке данных в сцену несколькими этапами (объектов) и у этих объектов есть свойсво "render_above_all" включено то объекты не из первой загрузки просто не отображаются в сцене ни при каких условиях ! демонстрацию пока сделать тяжело т.к. надо выкусить из кода именно это место ..

возможно вы знаете о этой проблеме ?

Не знаем, посмотрим в чем дело.
Александр (команда Blend4Web)
twitter
05 марта 2018 14:11
Ответ на сообщение пользователя ДЕНИС
Вопрос по "get_meta_tags(obj)"

а кроме как тут(ссылка) есть еще где то примеры и описание ?
https://www.blend4web.com/api_doc/module-objects.html#.get_meta_tags
и https://www.blend4web.com/api_doc/module-objects.html#~ObjectMetaTags

Нет, пока что других примеров в документации нет. Но мы планируем добавить примеры использования этого и других методов; возможно, они появятся уже в следующем релизе.
Технический писатель Blend4Web
05 марта 2018 15:25
Ответ на сообщение пользователя Theodore Mastikhin
Нет, пока что других примеров в документации нет. Но мы планируем добавить примеры использования этого и других методов; возможно, они появятся уже в следующем релизе.
Будем ждать, можно много придумать как использовать эти свойства в динамическом коде.

1. Тут возник еще один вопрос, на сколько я вижу(искал в API) нет возможности изменить активную камеру в сцене с несколькими камерами?

2. Не могу найти способ создать ортогональную камеру или изменить текущую на ортогональную. может не нашел метод, подскажите.

Спаисбо.
Денис
05 марта 2018 23:34
1. Тут возник еще один вопрос, на сколько я вижу(искал в API) нет возможности изменить активную камеру в сцене с несколькими камерами?
Нельзя. Но можно копировать положение камер, правда вручную.

2. Не могу найти способ создать ортогональную камеру или изменить текущую на ортогональную. может не нашел метод, подскажите.
Вопрос обсуждался здесь. По нему пока ничего не изменилось.
Александр (команда Blend4Web)
twitter
06 марта 2018 00:05
Нельзя. Но можно копировать положение камер, правда вручную.
про "копировать" это как? можно подробнее?
Денис
06 марта 2018 17:58
Ответ на сообщение пользователя Александр Романов
Нельзя. Но можно копировать положение камер, правда вручную.
Вопрос обсуждался здесь. По нему пока ничего не изменилось.

да как раз, по той теме, похоже это то что надо! Только как скопировать параметры?, которые нужны для
https://www.blend4web.com/api_doc/module-camera.html#.set_projection изменения проекции
а именно матрицу: эти самые параметры ortho(left, right, bottom, top, near, far, out) → {Mat4}
https://www.blend4web.com/api_doc/module-mat4.html#.ortho
например с уже существующей(второй камеры которая установлена как надо)

ну и конечно нужно сохранить проекцию прошлой камеры чтоб вернуть на место все?

ДОКУМЕНТАЦИЯ: тот самый параметр OUT в описании модуля MAT4 не обозначен, как опциональный, так же как в описании других модулей, но по факту, как я понимаю, это именно так. Данные возвращаются функцией и плюсом в параметр OUT ! кроме этого описано что возвращается МАТ4 матрица, она же массив Float32Array , но когда смотрим описание https://www.blend4web.com/api_doc/module-camera.html#.set_projection не видим MAT4 в описании .. а только массив .

Дополню: пытаюсь подгрузить в основной сцене и вторую камеру ортогональную из которой скопировать нужные параметры, как говорилось выше, но не тут то было .. похоже, что при загрузке загружает только одну камеру, что выбрана как активная в сцене, верно? т.к. второй камеры в списке загруженных объектов просто нет …
Денис
06 марта 2018 23:43
да как раз, по той теме, похоже это то что надо! Только как скопировать параметры?, которые нужны для
https://www.blend4web.com/api_doc/module-camera.html#.set_projection изменения проекции
а именно матрицу: эти самые параметры ortho(left, right, bottom, top, near, far, out) → {Mat4}
https://www.blend4web.com/api_doc/module-mat4.html#.ortho
например с уже существующей(второй камеры которая установлена как надо)

ну и конечно нужно сохранить проекцию прошлой камеры чтоб вернуть на место все?

Боюсь, что скопировать параметры проекции будет очень затруднительно, поскольку неактивные камеры загружаются как обычные объекты и данные о перспективных преобразованиях теряются. Таков текущий дизайн. Получится скопировать только tsr.


ДОКУМЕНТАЦИЯ: тот самый параметр OUT в описании модуля MAT4 не обозначен, как опциональный, так же как в описании других модулей, но по факту, как я понимаю, это именно так. Данные возвращаются функцией и плюсом в параметр OUT ! кроме этого описано что возвращается МАТ4 матрица, она же массив Float32Array , но когда смотрим описание https://www.blend4web.com/api_doc/module-camera.html#.set_projection не видим MAT4 в описании .. а только массив .
Не так. out параметр обязателен в конкретно этой функции. Он используется в качестве буфера, в который будет записано возвращаемое значение. Все модули используют подобный подход, который позволяет переиспользовать память, а не выделять ее каждый раз.

Дополню: пытаюсь подгрузить в основной сцене и вторую камеру ортогональную из которой скопировать нужные параметры, как говорилось выше, но не тут то было .. похоже, что при загрузке загружает только одну камеру, что выбрана как активная в сцене, верно? т.к. второй камеры в списке загруженных объектов просто нет …
Как я уже сказал, она загружается как обычный объект. Найти ее можно при помощи get_object_by_name итп.
Александр (команда Blend4Web)
twitter
07 марта 2018 00:27
Ответ на сообщение пользователя Александр Романов
так. out параметр обязателен в конкретно этой функции. Он используется в качестве буфера, в который будет записано возвращаемое значение. Все модули используют подобный подход, который позволяет переиспользовать память, а не выделять ее каждый раз.
НУ не то чтобы все …. : https://www.blend4web.com/api_doc/module-camera.html#.get_camera_angles
а так понятно в целом.

Ответ на сообщение пользователя Александр Романов
Боюсь, что скопировать параметры проекции будет очень затруднительно, поскольку неактивные камеры загружаются как обычные объекты и данные о перспективных преобразованиях теряются. Таков текущий дизайн. Получится скопировать только tsr.
…..
Как я уже сказал, она загружается как обычный объект. Найти ее можно при помощи get_object_by_name итп.

Вторая камера не загружается ни как … хотя в JSONe есть … я проверил не один раз выводя все объекты и вызывая в лог имена, кроме того раз на ее не переключиться и параметры не скопировать то оно и не подойдет, возвращаемся к плану "А" а именно:

вопрос есть ли где то пример такого :

- Имеем перспективную таргет камеру с управлением Camera,

- сохраняем текущие параметры таргет-камеры перед сменой вида,
m_cam. get_target ……

- делаем ее статической ,
m_cam.static_setup(camera);

- переносим в нужную точку, разворачиваем на нужную точку,
m_cam_a.move_camera_to_point(camera, camera_top_position, cam_lin_speed, cam_angle_speed, camera_top_cb);

- БЫЛ ПЛАН получить данные с примера камеры, (( но оказывается там не будет данных
тогда как создать правильную проекцию с камеры которая есть в бленедре верно настроенная?
cam_ortho_planesObj = m_cam.get_frustum_planes(camera_top, cam_ortho_planesObj );
- далее нужно отключить перспективу, а точнее сделать другую проекцию ВОТ ТУТ И ВОПРОСЫ

cam_ortho_FuturismMatrix = m_mat4.ortho(cam_ortho_planesObj.left, cam_ortho_planesObj.right, cam_ortho_planesObj.bottom, cam_ortho_planesObj.top, cam_ortho_planesObj.near, cam_ortho_planesObj.far)
m_cam.set_projection(camera, cam_ortho_FuturismMatrix);

- назначить нужный Скейл
m_cam.set_ortho_scale(camera, ORTO_SCALE);

-при обратном преобразовании все откатить назад к таргет камере обычной
m_cam.target_setup(camera …..

ДОПОЛНЮ:

при выполнении метода :
var cam_ortho_planesObj=m_cam.get_frustum_planes(camera, _mat4_tmp);

вываливается на копировании данных матрицы
/**
* Copy the values from one vec4 to another
*
* @param {Vec4} a the source vector
* @returns {Vec4} out
* @param {Vec4} out the receiving vector
* @method module:vec4.copy
*/
function copy(a, out) {
out[0] = a[0];
out[1] = a[1];
out[2] = a[2];
out[3] = a[3];
return out;
};


С СООБЩЕНИЕМ :
Uncaught TypeError: Cannot set property '0' of undefined
at Object.copy (b4w.js:5908)
Денис
08 марта 2018 01:10
Вторая камера не загружается ни как … хотя в JSONe есть … я проверил не один раз выводя все объекты и вызывая в лог имена

var objs = b4w.scenes.get_all_objects();
    for (var i = 0; i < objs.length; i++) {
        if (objs[i].type == "CAMERA")
            console.log(objs[i].name, objs[i]);
    }

У меня выводятся все три камеры, которые присутствуют на сцене.


при выполнении метода :
var cam_ortho_planesObj=m_cam.get_frustum_planes(camera, _mat4_tmp);

вываливается на копировании данных матрицы
/**
* Copy the values from one vec4 to another
*
* @param {Vec4} a the source vector
* @returns {Vec4} out
* @param {Vec4} out the receiving vector
* @method module:vec4.copy
*/
function copy(a, out) {
out[0] = a[0];
out[1] = a[1];
out[2] = a[2];
out[3] = a[3];
return out;
};

С СООБЩЕНИЕМ :
Uncaught TypeError: Cannot set property '0' of undefined
at Object.copy (b4w.js:5908)

В качестве параметра необходимо передавать специальный объект
вида:
{
        left:m_vec4.create(),
        right:m_vec4.create(),
        top:m_vec4.create(),
        bottom:m_vec4.create(),
        near:m_vec4.create(),
        far:m_vec4.create(),
    


Остальное посмотрю позже.
Александр (команда Blend4Web)
twitter
08 марта 2018 02:47
Ответ на сообщение пользователя Александр Романов
В качестве параметра необходимо передавать специальный объект
вида:
{
        left:m_vec4.create(),
        right:m_vec4.create(),
        top:m_vec4.create(),
        bottom:m_vec4.create(),
        near:m_vec4.create(),
        far:m_vec4.create(),
    


Да я конечно подумал, что инициализировать надо массив массивов, но посмотрев в документацию в которой написано, что MAT4 создается просто через create(); так и сделал..
думается, что стоит документацию в этом разделе расширить.. а то не ясно совсем, как пользоваться этим, а копаться все время в исходниках не вариант. да и вроде всегда сразу проверяется объект, который приемником является и если не подходит то сразу пишет.. а тут нет..
Денис
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.