Присоединить объект к платформе представления в Java3D - PullRequest
3 голосов
/ 08 октября 2009

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

1 / Прикрепить мой объект непосредственно к платформе просмотра (через выделенную группу 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 (но очень нестабильно).

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

Заранее спасибо за помощь

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

1 Ответ

2 голосов
/ 08 октября 2009

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

...