Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java3D-是否可以有一个跟踪移动对象的查看平台_Java_Java 3d - Fatal编程技术网

Java3D-是否可以有一个跟踪移动对象的查看平台

Java3D-是否可以有一个跟踪移动对象的查看平台,java,java-3d,Java,Java 3d,我有一个非常简单的Java3D应用程序,它包含两个立方体,其中一个环绕另一个 像这样: 如您所见,观景台的默认位置是从“一种”鸟瞰视图 看起来是这样的代码 TransformGroup cameraTG = u.getViewingPlatform(). getViewPlatformTransform(); Vector3f translate = new Vector3f(); Transform3D T3D = new Transform3D();

我有一个非常简单的Java3D应用程序,它包含两个立方体,其中一个环绕另一个

像这样:

如您所见,观景台的默认位置是从“一种”鸟瞰视图

看起来是这样的代码

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);
我的问题是,是否可以将观察平台设置为跟踪较大的立方体(围绕较小正方形旋转的立方体)。或者更直截了当地说,观察平台是否可以围绕给定的物体旋转

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


任何帮助或指点都会很棒。如果需要,请随时询问更多信息。

这里有一个很好的例子

原始网站不再可用,但您仍可以使用Internet存档中的缓存版本:

我的想法是这样的:

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);
    }
}

对于(j=0;j有一个更简单的解决方案。尝试使用角度和旋转来控制观看者的注视,您只需说出要观看的3D点。在ViewingTransform中,您可以称为“注视(…)”:


将两者都放在一个节点中,然后将转换应用到Botharrr!我现在明白了!非常感谢@gpasch,这是一个巨大的帮助。谢谢你的示例,我花了几个小时试图找到这样的示例,但没有用。再次感谢
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);
    }
}
        TransformGroup viewingTransformGroup = simpleUniv.getViewingPlatform().getViewPlatformTransform();
    Transform3D viewingTransform = new Transform3D();
    Point3d eye = viewersLocation;
    Point3d center = gazePoint;
    Vector3d up = new Vector3d(0,1,0); //assumes  +y-axis points up
    viewingTransform.lookAt(eye, center, up);
    viewingTransform.invert();
    viewingTransformGroup.setTransform(viewingTransform);