デフォルトのユニバース境界は、x = [ - 1メートル、1メートル]、y = [ - 1,1]、z = [ - 1,1]です。オブジェクトがこれらの境界を横切るとき、オブジェクトは部分的にレンダリングされます。別の宇宙サイズを設定するにはどうしたらいいですか?Java3Dのユニバースサイズがオブジェクトに収まらないほど小さすぎます
2
A
答えて
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);
}
}
それはちょうど、オブジェクトを移動するのではなく、ビューを移動するが、この場合、あなたはどちらか私は考え、私はこれが助けを願って行うことができますおそらく良い練習です!