Прикрепите объект к платформе просмотра в Java3D

StackOverflow https://stackoverflow.com/questions/1537784

  •  20-09-2019
  •  | 
  •  

Вопрос

В моем приложении Java3D у меня есть подвижная платформа просмотра (например, благодаря поведению "OrbitBehavior" и "KeyNavigatorBehavior"), поэтому я могу изменить свою точку зрения на сцену.Теперь я хотел бы добавить объект, который является "статичным" поверх моего представления, т. е.всегда просматривается одинаково, когда я перемещаю свой вид (например, как пистолет игрока в FPS).К настоящему времени я попробовал 2 следующих подхода к этой проблеме, но ни один из них не сработал.

1/ Прикрепите непосредственно мой объект к ViewingPlatform (через выделенную BranchGroup плюс TransformGroup).В этом случае мой объект просто не отображается (я абсолютно не уверен, что на самом деле разрешено выполнять такую операцию ...).Это эта часть моего кода:

Код :view платформа просмотра)

BranchGroup fixedBG = new BranchGroup();
TransformGroup fixedTG = new TransformGroup();
fixedTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
fixedTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
Transform3D transfo = new Transform3D();
transfo.setTranslation(new Vector3f(0.2f, 0.0f, -1.0f));
fixedTG.setTransform(transfo);
ColorCube fixedCube = new ColorCube(0.2);
fixedTG.addChild(fixedCube);
view.addChild(fixedBG);

2/ Примените к моему объекту такое же преобразование (поворот + перевод ;извлекается через getTransform() в getViewPlatformTransform() - я также попробовал здесь что-то более сложное, с операциями между этими преобразованиями и начальными позициями вида (PF и объекта) в качестве платформы просмотра.Я делаю все это в режиме реального времени, с выделенным поведением (те же условия пробуждения, что и поведение, изменяющее местоположение просмотра).Здесь мой объект исчезает, когда я перемещаю вид, а затем иногда появляется снова, когда я использую действие увеличения / уменьшения масштаба KeyNavigator (но очень нестабильным способом).

Я уверен, что то, что я пытаюсь сделать, выполнимо и, вероятно, довольно просто, но сейчас я понятия не имею...

Заранее благодарю за вашу помощь

(ПС:Поскольку английский не является моим родным языком, я, возможно, довольно сумбурно объясняю свою проблему:не стесняйтесь просить меня написать еще раз непонятные части)

Это было полезно?

Решение

Я не уверен на 100%, сработает ли это, но я просмотрел некоторую документацию - (http://graphcomp.com/info/specs/java3d/j3dguide/Intro.doc.html#47470) например, и я думаю, что вам нужно инвертировать порядок в графике сцены.Итак, обычно ваша платформа просмотра зависит от группы преобразований, которая зависит от группы ветвей, которая зависит от локали.Группа преобразования - это то, на что ориентируется представление.Если вы присоедините свой ColorCube к этой группе преобразований, а затем свою платформу просмотра к этому цветовому кубу, то вид и куб должны перемещаться вместе.Я думаю, вы могли бы вставить другую группу преобразований, чтобы сместить куб из вида.Пользователь, управляющий камерой, управляет группой преобразования выше по ветви.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top