默认的宇宙界限是x = [ - 1米,1米],y = [ - 1,1]和z = [ - 1,1]。当对象与这些边界相交时,它们仅部分呈现。如何设置另一个Universe大小?
答案 0 :(得分:1)
实际上,默认宇宙在技术上是无限的,毕竟它是一个虚拟世界。
这就是Java3D宇宙的工作原理:
来源:
所以宇宙不是太小,你的对象对于你想要的视图来说太大了。图像站在一个巨大的建筑物旁边,你不可能一次看到整个东西,但如果你退后一步,你可以从远处看到所有这一切,它看起来更小。因此,您需要移动对象或移动视图。以下是移动对象的方法:
TransformGroup moveGroup = new TransformGroup();
Transform3D move = new Transform3D();
move.setTranslation(new Vector3f(0.0f, 0.0f, -10.0f));
//^^ set the Vector3f to where you want the object to be
moveGroup.setTransform(move);
moveGroup.addChild(YOUR_OBJECT);
您还可以更改观看平台的查看位置。以下是您将如何做到这一点:
public class MoveEye extends Applet
{
public MoveEye()
{
setLayout(new BorderLayout());
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas = new Canvas3D(config);
add("Center", canvas);
BranchGroup content = getScene();
content.compile();
SimpleUniverse universe = new SimpleUniverse(canvas);
Transform3D move = lookTowardsOriginFrom(new Point3d(0, 0, -3));
universe.getViewingPlatform().getViewPlatformTransform().setTransform(move);
universe.addBranchGraph(content);
}
public BranchGroup getScene()
{
BranchGroup group = new BranchGroup();
group.addChild(new ColorCube(.5));
return group;
}
public Transform3D lookTowardsOriginFrom(Point3d point)
{
Transform3D move = new Transform3D();
Vector3d up = new Vector3d(point.x, point.y + 1, point.z);
move.lookAt(point, new Point3d(0.0d, 0.0d, 0.0d), up);
return move;
}
public static void main(String args[])
{
Frame frame = new MainFrame(new MoveEye(), 256, 256);
}
}
移动视图而不是移动对象可能是一种好习惯,但在这种情况下你可以做任何一种我想,我希望这有帮助!