3

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

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

代码:(使用viewViewingPlatform)

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:由于英语不是我的母语,我在解释我的问题时可能会很混乱:请不要犹豫,让我再写一遍无法理解的部分)

4

1 回答 1

2

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

于 2009-10-08T13:59:34.147 回答