在Java3D中将对象附加到视图平台

时间:2009-10-08 13:25:24

标签: java 3d java-3d scenegraph

在我的Java3D应用程序中,我有一个可移动的查看平台(例如,感谢“OrbitBehavior”和“KeyNavigatorBehavior”行为),所以我可以将我的观点改为场景。 现在,我想在我的视图中添加一个“静态”的对象,即在我移动视图时总是以相同的方式查看(例如,像FPS中玩家的枪)。 到目前为止,我尝试了以下两种解决此问题的方法,但没有一种能够解决问题。

1 / 直接将我的对象附加到ViewingPlatform(通过专用BranchGroup加一个TransformGroup)。 在这种情况下,我的对象根本就不显示(我绝对不确定它是否允许实际执行这样的操作......)。这是我的代码的一部分:

代码:(使用view ViewingPlatform)

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 / 向我的对象应用相同的转换(旋转+转换;通过getViewPlatformTransform()上的getTransform()检索 - 我在这里尝试了更复杂的东西,在这些转换和初始位置之间进行操作视图PF和对象)作为观察平台的一个。我通过专用行为(与修改视图位置的行为相同的唤醒条件)实时完成所有这些操作。 在这里,当我使用KeyNavigator的缩放/缩小动作时,我的对象在移动视图时会消失,然后有时再次出现(但是以一种非常不稳定的方式)。

我确信我要做的事情是可行的,可能很简单,但现在,我没有线索......

先谢谢你的帮助

(PS:由于英语不是我的母语,我在解释我的问题时可能会非常麻烦:不要犹豫,让我再写一些不可理解的部分)

1 个答案:

答案 0 :(得分:2)

我不是100%确定这是否有用,但我查看了一些文档 - (http://graphcomp.com/info/specs/java3d/j3dguide/Intro.doc.html#47470)例如,我认为你必须反转场景图中的顺序。因此,通常情况下,您的视图平台会挂起一个转换组,该转换组挂起一个挂起该区域设置的分支组。转换组是视图的定向。如果将ColorCube附加到该变换组,然后将视图平台附加到该颜色多维数据集,则视图和多维数据集应一起移动。您可以插入另一个变换组,以便从视图中偏移多维数据集。控制相机的用户正在操作分支上方的变换组。