Настройка коллизии материала для статических объектов
10 марта 2016 11:41
Приветствую. Столкнулся с проблемой настройки/перенастройки коллизии. Пример такой: имеется плоскость, созданная в blender, в настройках материала указана галочка в чекбоксе коллизии, в настройках физики указан тип физики - неподвижно, в настройках объекта указаны галки в чекбоксах форсированный объект и динамическая геометрия. При помощи API изменяю размер плоскости в большую/меньшую сторону (не принципиально) разнося вертексы в пространстве:
var old_v3_positions = m_geometry.extract_vertex_array(plane, 'material_plane', 'a_position');
var new_v3_positions = old_v3_positions.map(function(element){
return element*2;
});
m_geometry.update_vertex_array(plane, "material_plane", 'a_position', new_v3_positions);
m_scenes.update_scene_materials_params();
m_objects.update_boundings(plane);
Визуально плоскость увеличивается/уменьшается, но поверхность коллизии остаётся прежней
Я попробовал пойти путём глубокого копирования, и менять уже геометрию производных плоскостей. Результат повторяется: визуально копированная плоскость отображается, но столкновения с ней экспериментального динамического объекта не происходит.
Я схематично изобразил полученный результат. Слева изображен первый случай. Зелёным указана область коллизии, синим - визуальная плоскость. Справа изображен второй случай. Красным указан объект-родитель с работающей коллизией, оранжевым указан объект-потомок, который визуально присутствует на сцене, но для которого не работает коллизия.
var old_v3_positions = m_geometry.extract_vertex_array(plane, 'material_plane', 'a_position');
var new_v3_positions = old_v3_positions.map(function(element){
return element*2;
});
m_geometry.update_vertex_array(plane, "material_plane", 'a_position', new_v3_positions);
m_scenes.update_scene_materials_params();
m_objects.update_boundings(plane);
Визуально плоскость увеличивается/уменьшается, но поверхность коллизии остаётся прежней
Я попробовал пойти путём глубокого копирования, и менять уже геометрию производных плоскостей. Результат повторяется: визуально копированная плоскость отображается, но столкновения с ней экспериментального динамического объекта не происходит.
Я схематично изобразил полученный результат. Слева изображен первый случай. Зелёным указана область коллизии, синим - визуальная плоскость. Справа изображен второй случай. Красным указан объект-родитель с работающей коллизией, оранжевым указан объект-потомок, который визуально присутствует на сцене, но для которого не работает коллизия.
10 марта 2016 12:35
Приветствую. Столкнулся с проблемой настройки/перенастройки коллизии. Пример такой: имеется плоскость, созданная в blender, в настройках материала указана галочка в чекбоксе коллизии, в настройках физики указан тип физики - неподвижно, в настройках объекта указаны галки в чекбоксах форсированный объект и динамическая геометрия. При помощи API изменяю размер плоскости в большую/меньшую сторону (не принципиально) разнося вертексы в пространстве:Настройка коллизии в материале и в разделе физики это два разных типа коллизии которые друг друга взаимоисключают. Настройка коллизии при помощи материала это статический и главное(!) неизменяемый динамически тип коллизиии, то есть он подходит для объектов которые не будут меняться динамически (полы, стены и т.д.). Настройка физики в разделе физики позволяет создать объекты (так же и статические) но с которыми можно взаимодействовать в реальном времени и изменять при помощи API. Собственно что вам нужно сделать так это убрать коллизию с настроек материала.
Blend4Web и всё такое. Тридешу тридэ, моделю модели.
10 марта 2016 13:00
10 марта 2016 14:14
Опробовал предложенный способ: убрал коллизию из настроек материала, поставил галочку в разделе физики - физика объекта. После этого изменения появились столкновения с копированными плоскостями динамического объекта. Однако это не повлияло но перерасчёт поверхности столкновения объекта с изменённой геометрией. Я раздробил плоскость, увеличив количество вертексов и внёс некоторые изменения в создание нового массива координат, сымитировав неровность рандомом и приподняв для лучшей видимости (скриншот далее)
if (element == 0) element+=Math.random()*0.25+2;
return element;
Поверхность плоскости коллизии, которая была экспортирована из блендера по прежнему осталась ровной. Поверхность, которая была получена изменением геометрии отображается материалом зелёного цвета, приподнята на (2 + рандом) высотой над поверхностью коллизии.
if (element == 0) element+=Math.random()*0.25+2;
return element;
Поверхность плоскости коллизии, которая была экспортирована из блендера по прежнему осталась ровной. Поверхность, которая была получена изменением геометрии отображается материалом зелёного цвета, приподнята на (2 + рандом) высотой над поверхностью коллизии.
10 марта 2016 15:31
Насколько я знаю "неровный" материал может быть только статичным. Динамичным(активным) может быть только простейшим элемент (Поддерживаются: Box, Capsule, Sphere, Cylinder, Cone.)
Не стой, где попало… Попадет еще раз.
http://naviris.ru/
http://naviris.ru/
10 марта 2016 20:06
10 марта 2016 20:27
Ну почему же. Можно генерировать ландшафт на сервере в блендере и отдавать его в виде json файлов.
Не стой, где попало… Попадет еще раз.
http://naviris.ru/
http://naviris.ru/
11 марта 2016 09:13
Кирилл, вы бы не могли подробнее изложить свою мысль. Я не эксперт blender, и раньше не слышал об установке blender на сервер, а экспресс просмотр гугла по данному запросу не принёс никаких результатов. Или, возможно, вы имели ввиду генерацию ландшафта вручную в обычном редакторе blender?
11 марта 2016 09:24
Можно поступить так:
1. Пишем скрипт для блендера, который будет генерировать ландшафт
2. При генерации нового ландшафта работаем с blender из командной строки. Какой командой экспортировать в json можно посмотреть в логике работы менеджера проектов в b4w.
3. Полученый файл подгружаем клиенту и он видит только что сгенерированный ландшафт.
Так же где то видел уже готовые примеры автоматической генерации ландшафта для blender.
1. Пишем скрипт для блендера, который будет генерировать ландшафт
2. При генерации нового ландшафта работаем с blender из командной строки. Какой командой экспортировать в json можно посмотреть в логике работы менеджера проектов в b4w.
3. Полученый файл подгружаем клиенту и он видит только что сгенерированный ландшафт.
Так же где то видел уже готовые примеры автоматической генерации ландшафта для blender.
Не стой, где попало… Попадет еще раз.
http://naviris.ru/
http://naviris.ru/