论坛

由用户创建的信息 Ivan Lyubovnikov
28 January 2015 15:07
А вообще, какое поведение камеры требуется? Честно говоря, пока не уверен, стоит ли начинать писать свою модель движения.

Это конечно здорово, но вот при загрузке сцены в бразуере камера оказывается на оси Z - т.е. почему-то поворачивается на -90 градусов.
HOVER-камера слишком специфическая - она реализует обзор с высоты птичьего полета как в стратегиях, поэтому, вряд ли, подойдет.

У меня идея такая: конвертировать движение курсора в вектор, сделать проекцию этого вектора на сферу и уже по сфере кватернионом вращать.
- примерно так и работает TARGET-камера, которая стоит по умолчанию. При этом перемещение мыши слева направо пприведет к вращению вокруг вертикали, т.е. мировой оси Y, а сверху-вниз - вокруг локальной оси X самой камеры, что соответствует углам в сферической системе координат.
Если требуется вращение вокруг определенной точки, то TARGET-камера подходит лучше остальных.

Насколько я понял, вы повернули сцену так, что камера в блендере смотрит на куб снизу вверх, тогда и ось Z для неё будет вертикальной.

Пока непонятно следующее:

Даже если её как-то направить на сцену - то вид в блендере и в браузере будет различаться - видимо все из-за того же шарнирного замка.
и
Таргет вблизи шарнирного замка в браузере получает лишнее вращение и сцена выглядит под другим углом, нежели в блендере.
- без скриншотов или исходного blend-файла трудно сказать, т.е. при старте в приложении камера ориентирована по другому? Для всех камер кроме STATIC происходит выравнивание вертикали, как писал Евгений, это блокирует крен ("roll") камеры, изменение которого не было нужно в этих режимах - не знаю, в этом ли причина.


Теперь по вращениям:
А где у объектов/камры их матрицы? Я заглянул внутрь объектов и увидел там огромное количество параметров и несколько матриц.
- для поворотов используются кватернионы.

API-методы для поворота объектов содержатся в модуле transform.js:
get_rotation()
set_rotation()
set_rotation_v()
Там также можно и через углы Эйлера, но не рекомендуется.

Для работы с векторами, кватернионами и пр. используются модули quat, mat3, vec3, … - это на самом деле доступ к библиотеке glMatrix. Документация по библиотеке: http://glmatrix.net/docs/2.2.0/.
Единственное отличие - несколько изменен вызов методов библиотеки: везде, где первым параметром подается "out" - у нас нужно передавать его последним. Это неочевидное момент, но в ближайшее время мы напишем свою документацию с учетом этого обстоятельства.
26 January 2015 19:56
Привет!

и вообще - зачем это было сделано? неудобно же

Это сделано с целью соответствия стандартам OpenGL, на которых WebGL и основан. На самом деле - это в блендере оси расположены немного непривычно для 3D.
Вот даже есть обсуждение этой уникальности.

Сама поддержка блендеровской системы координат может только приводить к дополнительным сложностям, например, популярная WebGL-библиотека glMatrix, которую мы используем, завязана на стандартной с.к. из Opengl.

В принципе, можно было бы поддержать блендеровские координаты только для внешнего API, а приводить все к стандарту OpenGL уже внутри движка, сделав некую прослойку. Тогда с точки зрения разработчика приложения - все будет как в блендере. Но, я думаю, все-таки большинство разработчиков привыкло работать с системой координат OpenGL, поэтому незачем её менять.

Поэтому повороты в своем приложении будет гораздо удобнее мыслить именно в стандартах OpenGL, т.е. вращение вокруг вертикальной оси - значит вокруг Y.

Или таки надо писать свой код для вращения камеры

Того что есть в движке в принципе достаточно, поэтому свой код писать не нужно, если это только не что-то оригинальное.
Если есть проблемы с конкретной сценой, можете скинуть на почту, посмотрим.
17 December 2014 15:31
I am trying to figure out how to make the TEXT box glow

Hi, please see this answer.
You need to make an object "Selectable" in Blender. Then you can use one of the API methods which are described there.


08 December 2014 17:55
Hi, Christoph!

As seen from documentation:

"The glow effect can be activated by an application via API. The different models can be applied such as constant glow, fading out glow, pulsatory glow and any other. In order to enable the glow effect on a certain object it’s required to enable the Selectable checkbox on the Object > Blend4Web panel."

some API methods are required. Unfortunately, there isn't description how to do it. Maybe we should update the documentation to make it clear.

Anyway, you can use these methods from the scenes.js module:
set_glow_intensity() - constant glow
apply_glow_anim() - animated glow
apply_glow_anim_def() - animated glow (default settings defined in Blender under Object info tab)
clear_glow_anim() - remove glow animation
set_glow_color() - change glow color

For example:

scenes.set_glow_intensity(obj, 0.5)

scenes.apply_glow_anim(obj, 1, 1, 0)

03 December 2014 22:20
Ответ на сообщение пользователя -Vampire-
Единственное, наверное, что хочу добавить: при подходе "один модуль - один файл", ориентироваться в коде гораздо проще. ИМХО для dev - самое оно. Особенно если приложение большое (у меня вот фантазия богатая, я могу много чего понапридумывать) и код постоянно дописывается\переписывается. А на продакшне, да - единственный склеенный минимизированный файл

Ну, это само собой, я продакшн и имел ввиду .
03 December 2014 15:54
Привет!

Думаю, стоит оставить реализацию на разработчика приложения, если ему действительно это понадобится.

В большинстве случаев размер кода не настолько большой, чтобы экономить на загрузке. У себя мы используем Google Closure Compiler для компиляции всего движка и отдельных приложений, что уменьшает размер скриптов. Например, модуль src/batch.js из ~4000 строк до/после компиляции будет размером ~140Кб/40Кб, а вся библиотека в сжатом виде весит ~800Кб. Компилятор сейчас есть в составе SDK, но особенности компиляции наших приложений мы в документации не описывали. В будущем, возможно, мы упростим и подробно опишем эту процедуру, чтобы разработчикам приложений было удобно этим пользоваться.

Более того, разумным будет объединение всех скриптов приложения в один подгружаемый js-файл. В случае слабого канала будет проще отправить один запрос на сервер.

Если все-таки приходится грузить действительно много данных, то ваш метод в принципе нормален, когда назначается callback на загрузку. Такой подход используется в загрузчике модулей RequireJS - может, кстати, вам подойти, чтобы не писать свой велосипед.

Ещё, как вариант, вручную прописать всё тегом <script>, добавив атрибут defer или async для модулей, которые будут использоваться отложенно, также добавив для них событие onload. Так исчезнет проблема со временем загрузки, т.к. они будут грузиться асинхронно и не будут блокировать старт приложения, но всё равно останется ненужный трафик.
24 November 2014 22:37
Привет, это есть в "показе мод", только там не динамическая загрузка, а смена материала при помощи метода inherit_material. В сцене заранее присутствуют несколько материалов, которые таким образом чередуются. Но есть недостаток: для корректного отображения материалы должны быть близкими по набору блендеровских настроек. Вообщем не так удобно как хотелось бы .

Тут как раз вовремя появилась возможность использовать canvas-текстуры. Можно создать её в блендере, а потом через API элемента <canvas>, отрисовывать на ней что угодно, в том числе и динамически загруженное изображение.

Canvas-текстуры появятся в ближайшем релизе, но уже сейчас их можно попробовать в тестовой версии SDK и аддона. В разделе "Загрузки" в таблице совместимости есть ссылка на "14.11 Developer Preview" (нужно авторизоваться на форуме, иначе будет скрыта).

Внутри SDK есть документация по использованию:
- external/deploy/doc/ru/textures.html, раздел "Особые типы текстур->Canvas" - настройка в Blender.
- external/deploy/doc/ru/developers.html, раздел "Текстура типа Canvas" - работа с текстурой через API.

Есть даже демка по canvas-текстурам, она лежит в external/deploy/tutorials/examples/canvas_texture/.
24 November 2014 21:35
Привет!
Забыли, исправим к этому релизу, спасибо.

А на самом деле должно быть так:

(static) get_diffuse_color_factor(obj, mat_name) → {Number}
Get the diffuse color factor for the object material.

(static) get_alpha_factor(obj, mat_name) → {Number}
Get the diffuse alpha factor for the object material.
07 November 2014 12:09
Привет, все правильно так и должно быть.
Действительно, при динамической загрузке на сцену не добавляются камера и источники освещения. В будущем мы хотим это поддержать.

Пока в качестве решения можно заранее создать необходимые источники освещения в основной сцене. Тогда, возможно, понадобится менять их расположение - тут надо будет воспользоваться API модуля transform.js.

Также, чтобы скрыть/показать лампочку можно управлять её интенсивностью. Для этого есть метод lights.set_light_params(). Например:
lights.set_light_params("Lamp1", { light_energy: 0.1 });
16 October 2014 17:10
Ответ на сообщение пользователя nils.austa
I would like to create a shortcut key for File/export/Blend4web but it seems impossible at the moment(14.09)

When I press right mouse button on other export options, a menu item "Add Shortcut" appears but not with Blend4web.

Hi, Nils! This functionality will be available in the upcoming release later this month.