Программное вращение сцены java3d (используя OrbitBehaviour?)

У меня есть сцена java3d, состоящая из 3D-чертежа САПР и различных прикрепленных фигур с центром в 0,0,0. Я использую OrbitBehaviour, чтобы позволить пользователю перемещаться по нему.

Я хотел бы иметь кнопки, которые вращают сцену вокруг одной оси на фиксированную величину (скажем, 10 градусов, но, очевидно, в радианах). У меня уже есть кнопка «Домой», которая возвращается к исходной точке просмотра с помощью lookAt.

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

Правильно ли я думаю, что я должен попросить OrbitBehaviour получить его getViewPlatformTransform() и перейти к 0,0,0 -> повернуть его -> каким-то образом вернуться в исходное положение?


person UnixNerd    schedule 21.04.2017    source источник
comment
Чтобы уточнить, я хочу, чтобы сцена двигалась так, как если бы пользователь перетаскивал мышь, чтобы заставить ее немного вращаться вокруг одной оси.   -  person UnixNerd    schedule 21.04.2017


Ответы (1)


Самый простой способ — поместить все объекты в TransformGroup и применить к ним матрицу вращения.

TransformGroup tg = new TransformGroup();
Transform3D transform = new Transform3D();
/// add objects to transform group 
tg.setTransform(transform);

Если вы хотите изменить преобразование во время выполнения, вам также придется добавить соответствующие подсказки в эту группу преобразования.

person Dariusz    schedule 24.04.2017
comment
Спасибо, я пробовал это раньше, но мне нужно было добавлять и удалять метки после того, как я скомпилировал начальную сцену, и у меня возникли проблемы. На этот раз удалось решить эту проблему, и, конечно же, ваш ответ работает :-) - person UnixNerd; 26.04.2017
comment
Насколько я помню, объекты можно добавлять в сцену динамически (т.е. через группу трансформации), правда для этого нужны соответствующие подсказки, чтобы не кидать исключение во время выполнения. - person Dariusz; 26.04.2017
comment
Я думаю, что после компиляции исходной сцены можно добавить только BranchGroups. Поэтому другие объекты должны быть завернуты под один. - person UnixNerd; 27.04.2017