如何在 java 3d 中旋转 camera/viewPlatform
How do I rotate the camera/viewPlatform in java 3d
我刚开始java3D,我可以移动相机up/down/left/right/forwards/backwards,但我似乎想不通如何让相机角度发生变化,例如,从向前看变成向左看。有人可以给我举个例子吗?另外,我应该把 getViewingPlatform().getViewPlatformTransform().setTransform(test.position);在我的主要方法中,还是应该做其他事情?
我试过只使用鼠标并旋转视图
OrbitBehavior 轨道 = new OrbitBehavior(canvas, OrbitBehavior.REVERSE_ROTATE);
orbit.setSchedulingBounds(new BoundingSphere());
orbit.setRotXFactor(2);
orbit.setRotYFactor(2);
但是当我添加 getViewingPlatform().getViewPlatformTransform().setTransform(test.position) 时它不起作用;
到 main 方法中的 while 循环。视角反复重置。
您可以通过定义 3D "gazePoint"(点注意力集中在)来引导观察者(相机),而不是使用角度来引导它。为了防止相机向侧面倾斜,定义 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);
我忘了为什么要反转视图变换。希望这有帮助。
我刚开始java3D,我可以移动相机up/down/left/right/forwards/backwards,但我似乎想不通如何让相机角度发生变化,例如,从向前看变成向左看。有人可以给我举个例子吗?另外,我应该把 getViewingPlatform().getViewPlatformTransform().setTransform(test.position);在我的主要方法中,还是应该做其他事情?
我试过只使用鼠标并旋转视图 OrbitBehavior 轨道 = new OrbitBehavior(canvas, OrbitBehavior.REVERSE_ROTATE);
orbit.setSchedulingBounds(new BoundingSphere());
orbit.setRotXFactor(2);
orbit.setRotYFactor(2);
但是当我添加 getViewingPlatform().getViewPlatformTransform().setTransform(test.position) 时它不起作用; 到 main 方法中的 while 循环。视角反复重置。
您可以通过定义 3D "gazePoint"(点注意力集中在)来引导观察者(相机),而不是使用角度来引导它。为了防止相机向侧面倾斜,定义 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);
我忘了为什么要反转视图变换。希望这有帮助。