// Java 3D Test Applet // TextureApplet.java // Copyright (c) 1999 ENDO Yasuyuki // mailto:yasuyuki@javaopen.org // http://www.javaopen.org/j3dbook/index.html import java.applet.*; import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.text.*; import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.universe.SimpleUniverse; import com.sun.j3d.utils.behaviors.mouse.MouseRotate; import com.sun.j3d.utils.behaviors.mouse.MouseTranslate; import com.sun.j3d.utils.behaviors.mouse.MouseZoom; import com.sun.j3d.utils.image.TextureLoader; public class TextureApplet extends Applet { private boolean isStandalone = false; public TextureApplet() { this(false); } public TextureApplet(boolean isStandalone) { this.isStandalone = isStandalone; this.setLayout(new BorderLayout()); } public void init() { GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(config); this.add(canvas, BorderLayout.CENTER); SimpleUniverse universe = new SimpleUniverse(canvas); universe.getViewingPlatform().setNominalViewingTransform(); BranchGroup scene = createSceneGraph(); universe.addBranchGraph(scene); } private BranchGroup createSceneGraph() { BranchGroup root = new BranchGroup(); Background bg = new Background(new Color3f(0.5f, 0.5f, 0.5f)); bg.setApplicationBounds(new BoundingSphere(new Point3d(), 100.0)); root.addChild(bg); TransformGroup trans = new TransformGroup(); trans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); trans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); BoundingSphere bounds = new BoundingSphere(new Point3d(), 100.0); MouseRotate rotator = new MouseRotate(trans); rotator.setSchedulingBounds(bounds); root.addChild(rotator); MouseTranslate translator = new MouseTranslate(trans); translator.setSchedulingBounds(bounds); root.addChild(translator); MouseZoom zoomer = new MouseZoom(trans); zoomer.setSchedulingBounds(bounds); root.addChild(zoomer); Point3d[] vertices = new Point3d[4]; vertices[0] = new Point3d(-0.4, -0.4, 0.0); // 左下 3+-----+2 vertices[1] = new Point3d( 0.4, -0.4, 0.0); // 右下 | | vertices[2] = new Point3d( 0.4, 0.4, 0.0); // 右上 | | vertices[3] = new Point3d(-0.4, 0.4, 0.0); // 左上 0+-----+1 Point2f[] txcoords = new Point2f[4]; txcoords[0] = new Point2f(-2.0f, -2.0f); // 左下 3+-----+2 txcoords[1] = new Point2f( 2.0f, -2.0f); // 右下 | | txcoords[2] = new Point2f( 2.0f, 2.0f); // 右上 | | txcoords[3] = new Point2f(-2.0f, 2.0f); // 左上 0+-----+1 QuadArray geom = new QuadArray( vertices.length, GeometryArray.COORDINATES | GeometryArray.TEXTURE_COORDINATE_2); geom.setCapability(Geometry.ALLOW_INTERSECT); geom.setCoordinates(0, vertices); geom.setTextureCoordinates(0, txcoords); Appearance ap = createAppearance(); Shape3D grid = new Shape3D(geom, ap); grid.setCapability(Shape3D.ALLOW_GEOMETRY_READ); trans.addChild(grid); root.addChild(trans); return root; } private Appearance createAppearance() { Appearance app = new Appearance(); Image image = null; if (this.isStandalone) { // アプリケーションとして実行されている final Toolkit toolkit = Toolkit.getDefaultToolkit(); image = toolkit.getImage("face.gif"); } else { // アプレットとして実行されている image = getImage(getCodeBase(), "face.gif"); } MediaTracker mt = new MediaTracker(this); mt.addImage(image, 0); mt.checkAll(true); try { mt.waitForID(0); } catch (InterruptedException e) { e.printStackTrace(); } Texture2D texture2d = (Texture2D)new TextureLoader(image, this).getTexture(); app.setTexture(texture2d); return app; } public static void main(String[] args) { TextureApplet applet = new TextureApplet(true); // isStandalone = true; Frame frame = new MainFrame(applet, 500, 500); } }