/* Java3DTest.java Copyright (C) 2008, Freebeans This software is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2. This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this software; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ import java.awt.Frame; import java.awt.event.*; import java.awt.BorderLayout; import java.awt.GraphicsConfiguration; import com.sun.j3d.utils.geometry.ColorCube; import com.sun.j3d.utils.universe.*; import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.behaviors.vp.OrbitBehavior; /** * Sample Java3D program. */ public class Java3DTest extends Frame { private void addCubes(BranchGroup bg) { Transform3D t3d = new Transform3D(); TransformGroup objTrans = new TransformGroup(t3d); objTrans.addChild(new ColorCube(0.2)); bg.addChild(objTrans); t3d = new Transform3D(); t3d.setRotation(new AxisAngle4f(1.0f, 1.0f, 1.0f, (float)(Math.PI / 4))); t3d.setTranslation(new Vector3d(0.7, 0.7, -0.7)); objTrans = new TransformGroup(t3d); objTrans.addChild(new ColorCube(0.2)); bg.addChild(objTrans); t3d = new Transform3D(); t3d.setRotation(new AxisAngle4f(1.0f, 1.0f, 1.0f, (float)(Math.PI / 4))); t3d.setTranslation(new Vector3d(0.7, -0.7, 0.7)); objTrans = new TransformGroup(t3d); objTrans.addChild(new ColorCube(0.2)); bg.addChild(objTrans); t3d = new Transform3D(); t3d.setRotation(new AxisAngle4f(1.0f, 1.0f, 1.0f, (float)(Math.PI / 4))); t3d.setTranslation(new Vector3d(-0.7, 0.7, 0.7)); objTrans = new TransformGroup(t3d); objTrans.addChild(new ColorCube(0.2)); bg.addChild(objTrans); t3d = new Transform3D(); t3d.setRotation(new AxisAngle4f(1.0f, 1.0f, 1.0f, (float)(Math.PI / 4))); t3d.setTranslation(new Vector3d(1.4, 1.4, -1.4)); objTrans = new TransformGroup(t3d); objTrans.addChild(new ColorCube(0.2)); bg.addChild(objTrans); t3d = new Transform3D(); t3d.setRotation(new AxisAngle4f(1.0f, 1.0f, 1.0f, (float)(Math.PI / 4))); t3d.setTranslation(new Vector3d(1.4, -1.4, 1.4)); objTrans = new TransformGroup(t3d); objTrans.addChild(new ColorCube(0.2)); bg.addChild(objTrans); t3d = new Transform3D(); t3d.setRotation(new AxisAngle4f(1.0f, 1.0f, 1.0f, (float)(Math.PI / 4))); t3d.setTranslation(new Vector3d(-1.4, 1.4, 1.4)); objTrans = new TransformGroup(t3d); objTrans.addChild(new ColorCube(0.2)); bg.addChild(objTrans); t3d = new Transform3D(); t3d.setRotation(new AxisAngle4f(1.0f, 1.0f, 1.0f, (float)(Math.PI / 4))); t3d.setTranslation(new Vector3d(-2.1, 1.4, 1.4)); objTrans = new TransformGroup(t3d); objTrans.addChild(new ColorCube(0.2)); bg.addChild(objTrans); } public Java3DTest() { super("Java3D test"); setLayout(new BorderLayout()); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(config); add(canvas, BorderLayout.CENTER); SimpleUniverse universe = new SimpleUniverse(canvas); universe.getViewingPlatform().setNominalViewingTransform(); BranchGroup bg = new BranchGroup(); addCubes(bg); bg.compile(); universe.addBranchGraph(bg); OrbitBehavior orbit = new OrbitBehavior(canvas, OrbitBehavior.REVERSE_ALL); orbit.setSchedulingBounds(new BoundingSphere(new Point3d(0, 0, 0), 100.0)); universe.getViewingPlatform().setViewPlatformBehavior(orbit); // Windows Mobileエミュレータ上だと、フロントクリップがおかしい(?) // canvas.getView().setFrontClipDistance(0.05); } public static void main(String[] args) { Java3DTest sample = new Java3DTest(); sample.pack(); sample.setVisible(true); } }