我有一个非常简单的Java3D应用程序,它包含两个多维数据集,其中一个环绕另一个。

像这样:

java - Java3D-是否可以具有用于跟踪移动对象的viewingPlatform-LMLPHP

如您所见,查看平台的默认位置是从“类似”的鸟瞰图。

看起来像这样的代码

TransformGroup cameraTG = u.getViewingPlatform().
                   getViewPlatformTransform();
Vector3f translate = new Vector3f();
Transform3D T3D = new Transform3D();
translate.set( 0.0f, 0.0f, 20.0f);
T3D.setTranslation(translate);
cameraTG.setTransform(T3D);


我的问题是,是否可以将查看平台设置为跟踪较大的立方体(围绕较小正方形旋转的立方体)。或更直截了当,观景台是否可以围绕给定的身体旋转?

更多信息:
我的目标是建立一个包含太阳,地球和月亮的微型太阳系。我想从地球的角度来看它(几乎像国际空间站的观点一样)

java - Java3D-是否可以具有用于跟踪移动对象的viewingPlatform-LMLPHP

任何帮助或指针将是梦幻般的。如果需要,请随时询问更多信息。

最佳答案

您在这里有一个很好的例子http://java3d.nl/Tutorials/Java/Java3d/Controlthecamera_12.php

原来的http://java3d.nl网站不再可用,但是您仍然可以使用Internet存档中的缓存版本:https://web.archive.org/web/20131218022035/http://java3d.nl/Tutorials/Java/Java3d/Controlthecamera_12.php

         this.camera = this.universe.getViewingPlatform().getViewPlatformTransform();

         //Add things to the universe
         this.root = new BranchGroup();
         this.root.addChild(new ColorCube(0.2));
         this.universe.addBranchGraph(root);


我的想法是这样的:

BranchGroup b=new BranchGroup();
b.addChild(cube);
b.addChild(camera);


然后在循环中旋转块:

while(true) {
  ... b.getChild()......... etc
  apply transform
}


或更具体地

for(j=0; j<group.numChildren(); j++) {
    Node ni=group.getChild(j);
    if(ni instanceof TransformGroup) {
      Transform3D tdi=new Transform3D();
      TransformGroup tgi=(TransformGroup)group.getChild(j);
      tgi.getTransform(tdi);
      Transform3D rotation = new Transform3D();
      rotation.rotX(Math.toRadians(0.001*i));
      tdi.mul(rotation);
      tgi.setTransform(tdi);
    }
}

10-01 06:40