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