Форум

Как динамически менять Д/Ш/В объекта?

29 ноября 2016 20:26
Возьмем обычный куб. Допустим в блендере он 1х1х1м.
Как программно в B4W менять его размеры.
т.е. я хочу, чтобы этот куб у меня стал 0.8х0.5х2м.
а потом я передумаю, и захочу сделать его 1.2х0.7х1.3м.

Да, в модуле transform есть set_scale(obj, scale), но он во-первых равномерный во все стороны, во вторых он скейлит относительно геометрического центра объекта (поправьте меня, если это не так).
А я хочу, чтобы, например чтобы этот куб при любых его модификациях "стоял" на "земле". В 3D редакторах я бы просто выставил pivot point (опорная точка) в основание этого куба, но здесь этого нет. Можно максимум получить эту точку через get_object_center. Но это ничего не даст, даже вкупе с get_object_size, так как в нем выводится максимальный радиус объекта по всем 3-м осям. Если бы знать, что у объекта всегда высота (Z) максимальна, то можно было бы сдвигать объект от "пола" вверх на эту величину ,но нет - объект может быть максимальным по оси Х или У.

ИДЕАЛЬНО было бы введение функций
set_scale_x
set_scale_y
set_scale_z

get_scale_x
get_scale_y
get_scale_z

или даже лучше
get_dimension_x

set_dimension_x

Для упрощения можно получать\ставить размеры bounding-box-а объекта.

ИЛИ быть может это надо реализовывать через модуль geometry?
Я использовал оттуда только drawline.
По остальным функциям не отказался бы от примера их использования.
Я понимаю, что возможно в общем виде, для модификации сложных объектов модуль geometry вряд-ли применим, но для кубов (8 вершин) вполне возможен.

В общем, как подступиться к задаче, если есть пример использования geometry в контексте моей задачи - буду признателен
29 ноября 2016 20:58
Вроде как b4w умеет пока только скейлить равномерно.
Тема уже подымалась на форуме. Предлагали добавлять кости к объекту для изменения размера по осям.
29 ноября 2016 22:14
Тогда
Предлагали добавлять кости к объекту для изменения размера по осям.
Вроде нашел, вот.
Однако четкого решения не даётся.
Варианты
1. Можно попробовать кости (ресурсоемко, насколько я понял)
2. Анимация (это получается я анимирую объект от 1 см до 100 см за 100 кадров, а затем в зависимости от размера ставлю нужный фрейм анимации? А если у меня 3 измерения?)
3. Низкоуровневое API (видимо сложность будет в том, чтобы менять длину 4х(горизонтальных) ребер куба, если куб повернут под углом по оси Z, например. Хотя, решаемо. Непонятно, как поведет себя текстура, кстати).
Надо на свежую голову подумать.
29 ноября 2016 22:50
Если вариант с костями не устраивает… Я вот когда то кубик программно строил. Там можно размеры указывать.
Не стой, где попало… Попадет еще раз.
http://naviris.ru/
30 ноября 2016 10:29
можно ещё shape keys использовать, сделав ключи по каждой оси - так проще всего будет
01 декабря 2016 21:29
Ответ на сообщение пользователя Иван Любовников
можно ещё shape keys использовать, сделав ключи по каждой оси - так проще всего будет
Спасибо за наводку. Сделал набор Shape keys по X,Y,Z в блендере, сейчас буду разбирать пример "Morphing" из SDK. Я так понял там всё построено именно на Shape keys.
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.