Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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
如何在java 3d中旋转摄影机/viewPlatform_Java_View_Camera_Angle_Java 3d - Fatal编程技术网

如何在java 3d中旋转摄影机/viewPlatform

如何在java 3d中旋转摄影机/viewPlatform,java,view,camera,angle,java-3d,Java,View,Camera,Angle,Java 3d,我刚开始使用java3D,我可以上/下/左/右/前/后移动相机,但我似乎不知道如何改变相机的角度,例如,从向前看改为向左看。有人能给我举个例子吗?另外,我应该把getViewingPlatform().getViewPlatformTransform().setTransform(test.position)放在下面吗;用我的主要方法,还是我应该做些别的 我试过只用鼠标旋转视图 OrbitBehavior OrbitBehavior=新的OrbitBehavior(画布,OrbitBehavio

我刚开始使用java3D,我可以上/下/左/右/前/后移动相机,但我似乎不知道如何改变相机的角度,例如,从向前看改为向左看。有人能给我举个例子吗?另外,我应该把getViewingPlatform().getViewPlatformTransform().setTransform(test.position)放在下面吗;用我的主要方法,还是我应该做些别的

我试过只用鼠标旋转视图 OrbitBehavior OrbitBehavior=新的OrbitBehavior(画布,OrbitBehavior.REVERSE_ROTATE)

但是当我添加getViewingPlatform().getViewPlatformTransform().setTransform(test.position)时,它不起作用;
到main方法中的while循环。视角会反复重置。

您可以通过定义3D“注视点”(注意力集中在该点上)来控制视角,而不是使用角度来控制观众(相机)。要防止相机侧向倾斜,请定义upDir=[0,1,0](J3D假设+y轴向上)

然后,修改simpleUniverse中的viewingTransform

以下是我的应用程序中的示例代码:

// ***********declare these variables in class where canvas3D lives *****
//J3D stuff
public InteractiveCanvas3D  canvas3D;
public SimpleUniverse       simpleUniv;
private Transform3D         viewingTransform;
private TransformGroup viewingTransformGroup;

public  static Point3d viewersLocation;
public  static Point3d gazePoint;  //point viewer is looking at

// and initialize as follows:

viewingTransformGroup = simpleUniv.getViewingPlatform().getViewPlatformTransform();
viewingTransform = new Transform3D();


//called to update viewer's location and gaze:
// *********************** UpdateViewerGeometryJ3D 
public void UpdateViewerGeometryJ3D()  {
    Point3d eye = viewersLocation;  
    Point3d center = gazePoint;
    Vector3d up = upDir;
    viewingTransform.lookAt(eye, center, up);
    viewingTransform.invert();
    viewingTransformGroup.setTransform(viewingTransform);

我忘了为什么必须反转观察变换。希望这有帮助。

请包括您尝试过的内容。我有一个问题。当你左右上下移动并且相机角度改变时,方向是否保持不变?例如,如果我要向前移动,然后向右看,然后再次按住向前键,我会沿着新方向(右)向前移动,还是沿着旧方向(开始方向)向前移动?否。注视点(“注视()”)不会影响观看者的移动,只会影响观看的方向。让我们来做一个类比,比如在高速公路的路肩上发生了一起汽车火灾。司机们盯着燃烧的汽车的位置(注视点)。当他经过时,他的脖子不停地转动,不停地看着同一个固定点。我发现“移动的观众+固定的注视点”技术给用户一种在3D空间中的真实感。它更直观,因为它模仿了人类将注意力集中在物体上的方式。
// ***********declare these variables in class where canvas3D lives *****
//J3D stuff
public InteractiveCanvas3D  canvas3D;
public SimpleUniverse       simpleUniv;
private Transform3D         viewingTransform;
private TransformGroup viewingTransformGroup;

public  static Point3d viewersLocation;
public  static Point3d gazePoint;  //point viewer is looking at

// and initialize as follows:

viewingTransformGroup = simpleUniv.getViewingPlatform().getViewPlatformTransform();
viewingTransform = new Transform3D();


//called to update viewer's location and gaze:
// *********************** UpdateViewerGeometryJ3D 
public void UpdateViewerGeometryJ3D()  {
    Point3d eye = viewersLocation;  
    Point3d center = gazePoint;
    Vector3d up = upDir;
    viewingTransform.lookAt(eye, center, up);
    viewingTransform.invert();
    viewingTransformGroup.setTransform(viewingTransform);