由用户创建的信息 Evgeny Rodygin
02 September 2016 11:59
Месяц назад в Blend4Web 16.07 появилась новая мощная функция инстансинга. В этой статье Андрей Прахов наглядно демонстрирует, как она может помочь оптимизировать сложные сцены с большим количеством однотипных объектов.
Ссылка на статью
Ссылка на статью
02 September 2016 11:54
A month ago Blend4Web 16.07 introduced a powerful Instancing feature. In this article Andrey Prakhov clearly shows how it can help optimizing a complex scene with big amount of similar objects:
Link to the Article
Link to the Article
31 August 2016 14:17
Я бы рекомендовал следующий подход.
Создать Empty-объект в центре планеты. Припарентить к нему космический корабль. Таким образом, мы имеем связку, позволяющую простым вращением Empty точно поворачивать и смещать корабль по окружности.
По программной части так же можно воспользоваться интерполированием кватерниона, только лучше исользовать функцию quat.slerp
Если предположить, что конечная точка, где должен оказать корабль имеет координаты end_trans, то код инициализации выглядел бы примерно так:
Дальше остаётся только проинтерполировать значения поворота с течением фремени с помощью quat.slerp.
Создать Empty-объект в центре планеты. Припарентить к нему космический корабль. Таким образом, мы имеем связку, позволяющую простым вращением Empty точно поворачивать и смещать корабль по окружности.
По программной части так же можно воспользоваться интерполированием кватерниона, только лучше исользовать функцию quat.slerp
Если предположить, что конечная точка, где должен оказать корабль имеет координаты end_trans, то код инициализации выглядел бы примерно так:
var start_quat = m_trans.get_rotation(empty);
var trans = m_trans.get_translation(empty);
var start_dir = m_util.quat_to_dir(start_quat, _vec3_tmp);
var end_dir = m_vec3.subtract(end_trans, trans, _vec3_tmp_2);
m_vec3.normalize(end_dir, end_dir);
var end_quat = m_util.dir_to_quat(end_dir, m_util.AXIS_Z);
Дальше остаётся только проинтерполировать значения поворота с течением фремени с помощью quat.slerp.
19 August 2016 12:00
Reply to post of user Ammar Rashed
Oh! Thanks a lot.
But what about the camera issue? Also what if I am making a main menu, and wanna switch between scenes? since I cannot use the logic editor like "set scene to…", what shall I do? That shall cover my last questions regarding the project I am working on btw
I've taken a look at the scene. It is not the camera which gets an offset, it is the Plane object. If you take a look at its coordinates, they are close to [0,0,0], but in Blender, it receives some sort of offset because of applied modifiers, which we can't see in the baked animation (if you remove the modifiers, Plane will be in the center again). I don't know the exact reason for this (I'm not an artist), but the easiest solution is to consider that the object is really in the center.
Scene switching (loading/unloading) is not supported by Logic editor for the moment, but there are several workarounds can be applied. E.g. you can hide/unhide necessary objects instead of loading/unloading. Another option is to move camera to different locations on the current scene, where required objects are placed.
18 August 2016 17:32
16 August 2016 18:10
Можно-ли вместо несуществуещего "webpleer" воспользоваться нодой " js callback" и… если можно примерным кодом.Для использования ноды js callback нужно так или иначе иметь кастомное приложение. Использовать её в стандартном Web Player-е не получится. То есть, в вашем случае необходимо изменить приложение лежащее в папке: apps_dev/webplayer/webplayer.js, добавив нём вызов функции append_custom_callback. Сделать это нужно до инициализации движка, перед вызовом m_app.init(). Выглядеть это будет примерно так:
m_logic_nodes = require("logic_nodes"); // этот модуль необходимо подключить
function custom_cb() { // ваш коллбэк
m_camera_anim.stop_cam_rotating();
}
exports.init = function() { // эта функция уже объявлена в Web Player
...
m_logic_nodes.append_custom_callback(1, custom_cb) // вы сможете обращаться к коллбэку по id = 1
m_app.init(....
...
}
После этого вам нужно будет пересобрать Web Player через Project Manager.
16 August 2016 14:26
Добрый день.
Web Player - это тоже приложение со своей собственной логикой, которую совсем выключить не получится. Нужно понимать, какой итоговый результат вы хотите получить.
Если вам нужен весь интерфейс Web Player, и не хочется мириться с auto-rotate, то в любом случае придется написать несколько строчек кода, убрав из приложения этот функционал авто-поворота и пересобрав Web Player.
Если же интерфейс вас не волнует, то вы можете просто создать приложение пустышку через Project Manager. В этом случае вы получите "голое" приложение, которое только подключает возможность управления камерой, что тоже можно отключить, убрав строку:
Web Player - это тоже приложение со своей собственной логикой, которую совсем выключить не получится. Нужно понимать, какой итоговый результат вы хотите получить.
Если вам нужен весь интерфейс Web Player, и не хочется мириться с auto-rotate, то в любом случае придется написать несколько строчек кода, убрав из приложения этот функционал авто-поворота и пересобрав Web Player.
Если же интерфейс вас не волнует, то вы можете просто создать приложение пустышку через Project Manager. В этом случае вы получите "голое" приложение, которое только подключает возможность управления камерой, что тоже можно отключить, убрав строку:
m_app.enable_camera_controls();
16 August 2016 14:12
Да, теперь понятно, о чем речь. Действительно, с масштабом отличным по разным осям (non-uniform scale) этого сделать не получится ни с эмптиком, ни с каким-либо другим объектом. Нужен другой подход. Обычно наши художники используют арматурные модификаторы в этом случае. Т.е. четыре верхних вершины привязываются к одной кости, которая в дальнейшем может смещаться либо анимацией, либо через API соответствующими методами.
16 August 2016 11:21