Mercurial > hg > FederatedLinda
changeset 13:0652ac3c8b5f
add two_obj
author | axmo |
---|---|
date | Mon, 11 Aug 2008 22:20:03 +0900 |
parents | 34821c03b206 |
children | 006015077e99 |
files | tools/java3d-test/src/HelloUniverse.java tools/java3d-test/src/Java3DProgram.java tools/java3d-test/src/graff3d.java tools/java3d-test/src/two_obj.java |
diffstat | 4 files changed, 696 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/tools/java3d-test/src/HelloUniverse.java Mon Aug 11 01:53:54 2008 +0900 +++ b/tools/java3d-test/src/HelloUniverse.java Mon Aug 11 22:20:03 2008 +0900 @@ -82,8 +82,13 @@ // desired operation on the specified transform and add // it into the scene graph. Transform3D yAxis = new Transform3D(); + TransformGroup transRoot = new TransformGroup(); + Transform3D transform = new Transform3D(); Alpha rotationAlpha = alpha; + transform.set(new Vector3d(1.0, 1.0, 1.0)); + transRoot.setTransform(transform); + RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, objTrans, yAxis, 0.0f, (float) Math.PI*2.0f);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/java3d-test/src/Java3DProgram.java Mon Aug 11 22:20:03 2008 +0900 @@ -0,0 +1,77 @@ +// Java3DProgram.java + +import java.applet.Applet; +import com.sun.j3d.utils.applet.MainFrame; +import javax.media.j3d.*; +import javax.vecmath.*; +import java.awt.*; + +import com.sun.j3d.utils.universe.*; +import com.sun.j3d.utils.geometry.ColorCube; +import com.sun.j3d.utils.behaviors.vp.OrbitBehavior; + +/* + <applet code=Java3DProgram width=200 height=200> + </applet> +*/ + +public class Java3DProgram extends Applet { + + public SimpleUniverse universe = null; + public Canvas3D canvas = null; + + public BranchGroup createObjects() { + + BranchGroup root = new BranchGroup(); + + // 平行移動を定義 + TransformGroup transRoot = new TransformGroup(); + Transform3D transform = new Transform3D(); + + // x方向に1.0m移動 + transform.set(new Vector3d(1.0, 0, 0)); + transRoot.setTransform(transform); + + // 色つき立方体の作成 + transRoot.addChild(new ColorCube(0.4)); + root.addChild(transRoot); + root.compile(); + + return root; + } + + public void setOrbitBehavior() { + + // マウスでぐりぐりするための処理 + OrbitBehavior orbit = new OrbitBehavior(canvas, OrbitBehavior.REVERSE_ALL); + orbit.setSchedulingBounds( + new BoundingSphere(new Point3d(0, 0, 0), 100.0)); + universe.getViewingPlatform().setViewPlatformBehavior(orbit); + } + + public void init() { + + setLayout(new BorderLayout()); + + // キャンバスの作成 + GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); + Canvas3D canvas = new Canvas3D(config); + add("Center", canvas); + + // SimpleUniverse の作成 + universe = new SimpleUniverse(canvas); + + // カメラの移動(原点から少しだけ後ろにずれる) + universe.getViewingPlatform().setNominalViewingTransform(); + + // マウスでぐりぐり動かすための処理 + setOrbitBehavior(); + + // オブジェクトの追加 + universe.addBranchGraph(createObjects()); + } + + public static void main(String[] args) { + new MainFrame(new Java3DProgram(), 200, 200); + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/java3d-test/src/graff3d.java Mon Aug 11 22:20:03 2008 +0900 @@ -0,0 +1,529 @@ +// Draw the graph of a function +// version 1.0 (c) K.Sasano + +import java.applet.Applet; +import java.awt.*; +import java.awt.event.*; +import java.awt.BorderLayout; +import java.awt.Frame; +import java.awt.Font; +import java.awt.GraphicsConfiguration; +import java.util.Enumeration; +import javax.media.j3d.*; +import javax.vecmath.*; +import com.sun.j3d.utils.universe.*; +import com.sun.j3d.utils.applet.MainFrame; +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.geometry.Text2D; + +public class graff3d extends Applet { + + // global variables + float xwidth; + float x0; + float ywidth; + float y0; + float xdelta; + float ydelta; + float z0; + float zwidth; + float zvalue[][]; + float zcenter[][]; + Shape3D surfaceGraph; + Shape3D meshGraph; + Shape3D xyPlane; + Shape3D xyzAxes; + Shape3D xyzArrowHead; + TransformGroup xyzAxesLabels; + + //key behavior + public class KeyBehavior extends Behavior{ + + private BranchGroup bg; + private WakeupOnAWTEvent wue; + + KeyBehavior(BranchGroup bg){ + this.bg=bg; + } + + public void initialize(){ + this.wakeupOn(wue = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED)); + } + + public void processStimulus(Enumeration criteria){ + AWTEvent ae = (wue.getAWTEvent())[0]; + char c=((KeyEvent)ae).getKeyChar(); + TransparencyAttributes + surftr = (surfaceGraph.getAppearance()).getTransparencyAttributes(); + TransparencyAttributes + meshtr = (meshGraph.getAppearance()).getTransparencyAttributes(); + TransparencyAttributes + xytr = (xyPlane.getAppearance()).getTransparencyAttributes(); + + if(c=='s'){ //Show/Erase surfacegraph + addSurface=!addSurface; + if(addSurface){ + surftr = new TransparencyAttributes(TransparencyAttributes.NONE,0.0f); + }else{ + surftr = new TransparencyAttributes(TransparencyAttributes.NICEST,1.0f); + } + } + if(c=='m'){ //Show/Erase meshgraph + float tr; + addMesh=!addMesh; + if(addMesh){ tr= 0.0f; } else { tr=1.0f; } + meshtr = new TransparencyAttributes(TransparencyAttributes.NICEST,tr); + } + if(c=='z'){ //Show/Erase xyplane + float tr; + addXYPlane=!addXYPlane; + if(addXYPlane){ tr= 0.6f; } else { tr=1.0f; } + xytr = new TransparencyAttributes(TransparencyAttributes.NICEST,tr); + } + (xyPlane.getAppearance()).setTransparencyAttributes(xytr); + (meshGraph.getAppearance()).setTransparencyAttributes(meshtr); + (surfaceGraph.getAppearance()).setTransparencyAttributes(surftr); + + this.wakeupOn(wue = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED)); + } + } + + //create scene + public BranchGroup createSceneGraph() { + BranchGroup objRoot = new BranchGroup(); + BoundingSphere bounds = new BoundingSphere(); + bounds.setRadius( 1000.0 ); + + //prepare for movement + TransformGroup objTrans = new TransformGroup(); + objRoot.addChild(objTrans); + + objTrans.setCapability( TransformGroup.ALLOW_TRANSFORM_READ ); + objTrans.setCapability( TransformGroup.ALLOW_TRANSFORM_WRITE ); + + MouseRotate rotat = new MouseRotate( objTrans ); + MouseTranslate trans = new MouseTranslate( objTrans ); + MouseZoom zoom = new MouseZoom( objTrans ); + + rotat.setSchedulingBounds( bounds ); + trans.setSchedulingBounds( bounds ); + zoom.setSchedulingBounds( bounds ); + + objTrans.addChild(rotat); + objTrans.addChild(trans); + objTrans.addChild(zoom); + + //add xy-plane + objTrans.addChild(xyPlane); + + //add graphs + objTrans.addChild(surfaceGraph); + objTrans.addChild(meshGraph); + + //add axes + objTrans.addChild(xyzAxes); //axis + objTrans.addChild(xyzArrowHead); //arrowhead + objTrans.addChild(xyzAxesLabels); //label + + //add key behavior + KeyBehavior myKeyBehav=new KeyBehavior(objRoot); + myKeyBehav.setSchedulingBounds( bounds ); + objRoot.addChild(myKeyBehav); + + //compile the object + objRoot.compile(); + + return objRoot; + } + + //surface graph + private Shape3D graph(){ + int totalN=6*n*n; + + Point3f coord[] = new Point3f[totalN]; + Color3f color[] = new Color3f[totalN]; + + for(int i=0; i<n; i++){ + float xi=xmin+i*xdelta; + float xii=xi+xdelta; + float xcenter=xi+0.5f*xdelta; + for(int j=0; j<n; j++){ + int tmp=6*(i*n+j); + float yj=ymin+j*ydelta; + float yjj=yj+ydelta; + float ycenter=yj+0.5f*ydelta; + + coord[tmp]=new Point3f(xn(xcenter),yn(ycenter),zn(zcenter[i][j])); + coord[tmp+1]=new Point3f(xn(xi),yn(yj),zn(zvalue[i][j])); + coord[tmp+2]=new Point3f(xn(xii),yn(yj),zn(zvalue[i+1][j])); + coord[tmp+3]=new Point3f(xn(xii),yn(yjj),zn(zvalue[i+1][j+1])); + coord[tmp+4]=new Point3f(xn(xi),yn(yjj),zn(zvalue[i][j+1])); + coord[tmp+5]=coord[tmp+1]; + + color[tmp]=hcolor(zn(zcenter[i][j])); + color[tmp+1]=hcolor(zn(zvalue[i][j])); + color[tmp+2]=hcolor(zn(zvalue[i+1][j])); + color[tmp+3]=hcolor(zn(zvalue[i+1][j+1])); + color[tmp+4]=hcolor(zn(zvalue[i][j+1])); + color[tmp+5]=color[tmp+1]; + } + } + + int stripCounts[] = new int[n*n]; + for(int i=0; i<n*n; i++){stripCounts[i]=6;} + + TriangleFanArray tfa = + new TriangleFanArray( + totalN, + TriangleFanArray.COORDINATES|TriangleFanArray.COLOR_3, + stripCounts + ); + tfa.setCoordinates(0,coord); + tfa.setColors(0,color); + + //construct appearence + TransparencyAttributes surftr; + if(addSurface){ + surftr = new TransparencyAttributes(TransparencyAttributes.NONE,0.0f); + }else{ + surftr = new TransparencyAttributes(TransparencyAttributes.NICEST,1.0f); + } + PolygonAttributes attr = new PolygonAttributes(); + attr.setCullFace(PolygonAttributes.CULL_NONE); + attr.setPolygonMode(PolygonAttributes.POLYGON_FILL); + + Appearance appear = new Appearance(); + appear.setPolygonAttributes(attr); + appear.setCapability(Appearance.ALLOW_TRANSPARENCY_ATTRIBUTES_READ); + appear.setCapability(Appearance.ALLOW_TRANSPARENCY_ATTRIBUTES_WRITE); + appear.setTransparencyAttributes(surftr); + + //construct Shape3D for surface graph + Shape3D graphshape=new Shape3D(); + graphshape.removeGeometry(0); + graphshape.addGeometry(tfa); + graphshape.setAppearance(appear); + graphshape.setCapability(Shape3D.ALLOW_APPEARANCE_WRITE); + graphshape.setCapability(Shape3D.ALLOW_APPEARANCE_READ); + + return graphshape; + } + + //color data corresponding to the height + private Color3f hcolor(float h){ + float r,g,b; + h=h*2; + if(h>1){ r=1.0f; g=0.5f; b=0.0f; } + else if(h>0){ r=h*1.0f; g=0.75f-h*0.25f; b=0.0f; } + else if(h>-1){ r=0.0f; g=(1+h)*0.75f; b= -h*0.75f; } + else{ r=0.0f; g=0.0f; b=0.75f;} + return new Color3f(r,g,b); + } + + //mesh graph + private Shape3D meshgraph(){ + //construct coordinat data + int totalN=2*(nmesh+1)*(nmesh+1); + + Point3f coord[] = new Point3f[totalN]; + Color3f color[] = new Color3f[totalN]; + Color3f lcolor = new Color3f(1.0f, 1.0f, 1.0f); + + for(int i=0; i<=nmesh; i++){ + float xi=xmin+i*(xmax-xmin)/nmesh; + + for(int j=0; j<=nmesh; j++){ + int tmp=i*(nmesh+1)+j; + int tmp1=j*(nmesh+1)+i+(nmesh+1)*(nmesh+1); + float yj=ymin+j*(ymax-ymin)/nmesh; + + coord[tmp]=new Point3f(xn(xi),yn(yj),zn(f(xi,yj))); + color[tmp]=lcolor; + + coord[tmp1]=coord[tmp]; + color[tmp1]=color[tmp]; + } + } + + int stripCounts[]; + stripCounts= new int[2*(nmesh+1)]; + for(int i=0; i<=2*nmesh+1; i++){stripCounts[i]=nmesh+1;} + + LineStripArray lsa = + new LineStripArray( + totalN, + LineStripArray.COORDINATES|LineStripArray.COLOR_3, + stripCounts + ); + lsa.setCoordinates(0,coord); + lsa.setColors(0,color); + + //construct appearence + LineAttributes attr = new LineAttributes(); + attr.setLineWidth(meshLineWidth); + + float tr; + if(addMesh){ tr= 0.0f; } else { tr=1.0f; } + TransparencyAttributes transAttrib; + transAttrib = new TransparencyAttributes(TransparencyAttributes.NICEST,tr); + + Appearance appear = new Appearance(); + appear.setLineAttributes(attr); + appear.setTransparencyAttributes(transAttrib); + appear.setCapability(Appearance.ALLOW_TRANSPARENCY_ATTRIBUTES_READ); + appear.setCapability(Appearance.ALLOW_TRANSPARENCY_ATTRIBUTES_WRITE); + + //construct Shape3D for meshgraph + Shape3D graphshape=new Shape3D(); + graphshape.removeGeometry(0); + graphshape.addGeometry(lsa); + graphshape.setAppearance(appear); + graphshape.setCapability(Shape3D.ALLOW_APPEARANCE_WRITE); + graphshape.setCapability(Shape3D.ALLOW_APPEARANCE_READ); + + return graphshape; + } + + //xy-plane + private Shape3D xyplane(){ + QuadArray xyp= new QuadArray(4,QuadArray.COORDINATES|QuadArray.COLOR_3); + xyp.setCoordinate(0,new Point3f(0.5f,0.5f,zn(0.0f))); + xyp.setCoordinate(1,new Point3f(-0.5f,0.5f,zn(0.0f))); + xyp.setCoordinate(2,new Point3f(-0.5f,-0.5f,zn(0.0f))); + xyp.setCoordinate(3,new Point3f(0.5f,-0.5f,zn(0.0f))); + for(int i=0; i<4; i++){xyp.setColor(i, new Color3f(1.0f,1.0f,1.0f));} + + PolygonAttributes attrib = new PolygonAttributes(); + attrib.setCullFace(PolygonAttributes.CULL_NONE); + attrib.setPolygonMode(PolygonAttributes.POLYGON_FILL); + + TransparencyAttributes transAttrib; + float tr; + if(addXYPlane){ tr= 0.6f; } else { tr=1.0f; } + transAttrib = new TransparencyAttributes(TransparencyAttributes.NICEST,tr); + + Appearance appear = new Appearance(); + appear.setPolygonAttributes(attrib); + appear.setTransparencyAttributes(transAttrib); + appear.setCapability(Appearance.ALLOW_TRANSPARENCY_ATTRIBUTES_READ); + appear.setCapability(Appearance.ALLOW_TRANSPARENCY_ATTRIBUTES_WRITE); + + Shape3D xyplaneshape=new Shape3D(); + xyplaneshape.removeGeometry(0); + xyplaneshape.addGeometry(xyp); + xyplaneshape.setAppearance(appear); + xyplaneshape.setCapability(Shape3D.ALLOW_APPEARANCE_WRITE); + xyplaneshape.setCapability(Shape3D.ALLOW_APPEARANCE_READ); + + return xyplaneshape; + } + + //axes + private Shape3D axes(){ + LineArray a=new LineArray(6,LineArray.COORDINATES|LineArray.COLOR_3); + a.setCoordinate(0,new Point3f(0.6f,yn(0.0f),zn(0.0f))); + a.setCoordinate(1,new Point3f(-0.6f,yn(0.0f),zn(0.0f))); + a.setCoordinate(2,new Point3f(xn(0.0f),0.6f,zn(0.0f))); + a.setCoordinate(3,new Point3f(xn(0.0f),-0.6f,zn(0.0f))); + a.setCoordinate(4,new Point3f(xn(0.0f),yn(0.0f),0.6f)); + a.setCoordinate(5,new Point3f(xn(0.0f),yn(0.0f),-0.6f)); + for(int i=0; i<6; i++){ a.setColor(i,new Color3f(1.0f,1.0f,0.0f));} + + LineAttributes att=new LineAttributes(); + att.setLineWidth(2.0f); + Appearance appear = new Appearance(); + appear.setLineAttributes(att); + + Shape3D ax=new Shape3D(); + ax.removeGeometry(0); + ax.addGeometry(a); + ax.setAppearance(appear); + + return ax; + } + + //arrowhead + private Shape3D arrowhead(){ + int scounts[]= new int[3]; + for(int i=0; i<3; i++){scounts[i]=10;} + + TriangleFanArray ah=new TriangleFanArray(30, + TriangleFanArray.COORDINATES|TriangleFanArray.COLOR_3, + scounts); + ah.setCoordinate(0,new Point3f(0.6f, yn(0.0f), zn(0.0f))); + ah.setCoordinate(10,new Point3f(xn(0.0f),0.6f, zn(0.0f))); + ah.setCoordinate(20,new Point3f(xn(0.0f), yn(0.0f), 0.6f)); + float d=(float)Math.PI/4; + for(int i=0 ; i<=8; i++){ + ah.setCoordinate(i+1, + new Point3f(0.55f, yn(0.0f)+0.02f * (float)Math.cos(d*i), zn(0.0f)+0.02f *(float)Math.sin(d*i))); + ah.setCoordinate(i+11, + new Point3f(xn(0.0f)+0.02f * (float)Math.cos(d*i), 0.55f, zn(0.0f)+0.02f *(float)Math.sin(d*i))); + ah.setCoordinate(i+21, + new Point3f(xn(0.0f)+0.02f * (float)Math.cos(d*i), yn(0.0f)+0.02f *(float)Math.sin(d*i), 0.55f)); + } + Color3f color[]=new Color3f[30]; + for(int i=0; i<30; i++){ color[i]=new Color3f(1.0f, 1.0f, 0.0f);} + ah.setColors(0,color); + + return new Shape3D(ah); + } + + //axes labels + TransformGroup axeslabels(){ + TransformGroup tmp = new TransformGroup(); + + PolygonAttributes polyAttrib = new PolygonAttributes(); + polyAttrib.setCullFace(PolygonAttributes.CULL_NONE); + polyAttrib.setBackFaceNormalFlip(true); + + Transform3D xmov= (new Transform3D()); + xmov.set(new Vector3f(0.63f,yn(0.0f)-0.05f,zn(0.0f))); + Text2D xlbl=new Text2D("x",new Color3f(1.0f,1.0f,0.0f),"Helvetica",24,Font.BOLD); + (xlbl.getAppearance()).setPolygonAttributes(polyAttrib); + TransformGroup xmovg=new TransformGroup(xmov); + xmovg.addChild(xlbl); + + Transform3D ymov= new Transform3D(); + Transform3D tmpymov=new Transform3D(); + tmpymov.rotZ(Math.PI/2.0d); + ymov.set(new Vector3f(xn(0.0f)+0.05f,0.63f,zn(0.0f))); + ymov.mul(tmpymov); + Text2D ylbl=new Text2D("y",new Color3f(1.0f,1.0f,0.0f),"Helvetica",24,Font.BOLD); + (ylbl.getAppearance()).setPolygonAttributes(polyAttrib); + TransformGroup ymovg=new TransformGroup(ymov); + ymovg.addChild(ylbl); + + Transform3D zmov= new Transform3D(); + Transform3D tmpzmov=new Transform3D(); + tmpzmov.rotX(Math.PI/2.0d); + zmov.set(new Vector3f(xn(0.0f)-0.02f,yn(0.0f),0.63f)); + zmov.mul(tmpzmov); + Text2D zlbl=new Text2D("z",new Color3f(1.0f,1.0f,0.0f),"Helvetica",24,Font.BOLD); + (zlbl.getAppearance()).setPolygonAttributes(polyAttrib); + TransformGroup zmovg=new TransformGroup(zmov); + zmovg.addChild(zlbl); + + tmp.addChild(xmovg); + tmp.addChild(ymovg); + tmp.addChild(zmovg); + + return tmp; + } + + //get normalized coordinate + float xn(float x){ return (x-x0)/xwidth;} + float yn(float y){ return (y-y0)/ywidth;} + float zn(float z){ return (z-z0)/zwidth;} + + //////////// main class /////////////// + public graph3d() { + // preparation for numeric data + xwidth=xmax-xmin; + x0=(xmax+xmin)/2; + ywidth=ymax-ymin; + y0=(ymax+ymin)/2; + xdelta=xwidth/n; + ydelta=ywidth/n; + + zvalue = new float[n+1][n+1]; + zcenter = new float[n][n]; + + int i; int j; + + for(i=0; i<=n; i++){ + for(j=0; j<=n; j++){ + zvalue[i][j]=f(xmin+i*xdelta, ymin+j*ydelta); + } + } + for(i=0; i<n; i++){ + for(j=0; j<n; j++){ + zcenter[i][j]=f(xmin+(i+0.5f)*xdelta, ymin+(j+0.5f)*ydelta); + } + } + + // if necessary, determine zmin and zmax automatically + if(zmin==0.0f && zmax==0.0f){ + zmin=Float.POSITIVE_INFINITY; zmax=Float.NEGATIVE_INFINITY; + for(i=0; i<=n; i++){ + for(j=0; j<=n; j++){ + zmin=Math.min(zmin,zvalue[i][j]); + zmax=Math.max(zmax,zvalue[i][j]); + } + } + for(i=0; i<n; i++){ + for(j=0; j<n; j++){ + zmin=Math.min(zmin,zcenter[i][j]); + zmax=Math.max(zmax,zcenter[i][j]); + } + } + } + + zwidth=zmax-zmin; + z0=(zmax+zmin)/2; + + /////////// main part /////////// + setLayout(new BorderLayout()); + + GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); + + Canvas3D canvas = new Canvas3D(config); + add("Center", canvas); + + SimpleUniverse universe = new SimpleUniverse(canvas); + universe.getViewingPlatform().setNominalViewingTransform(); + + //construct graphic objects + surfaceGraph = graph(); + meshGraph = meshgraph(); + xyPlane = xyplane(); + xyzAxes = axes(); + xyzArrowHead = arrowhead(); + xyzAxesLabels = axeslabels(); + + BranchGroup scene = createSceneGraph(); + universe.addBranchGraph(scene); + } + + //main method to make both of Application and Applet + public static void main(String[] args) { + Frame frame = new MainFrame(new graff3d(), 480, 480); + } + +///////////////////////////////////////////////// +// define our function and give necessary data // +///////////////////////////////////////////////// + + // our function + float f(float x, float y){ + return x*x-y*y; + //return x*x*x + y*y*y - 3*x*y; + //return (y-x*x)*(y-2*x*x); + //return (float)Math.sin(x*x+y*y); + //if(x==0.0f){ return 0.0f; } else { return y*y/x; } + //if((x==0.0f) && (y==0.0f)){ return 0.5f; } else {return x*y/(x*x+y*y);} + } + + // domain of definition + float xmin=-1.0f; // min of x + float xmax=1.0f; // max of x + float ymin=-1.0f; // min of y + float ymax=1.0f; // max of y + + // range of the value + // If both of zmin and zmax are set to 0.0f, then zmin and zmax + // are calculated automatically. + float zmin=0.0f; // min of z + float zmax=0.0f; // max of z + + int n=20; // number of divisions for surface graph + int nmesh=20; // number of divisions for mesh graph + + float meshLineWidth=2.0f; // width of lines in mesh graph + + boolean addSurface=true; // FLAG : show/erase surface graph + boolean addMesh=true; // FLAG : show/erase mesh graph + boolean addXYPlane=false; // FLAG : show/erase xy-plane +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/java3d-test/src/two_obj.java Mon Aug 11 22:20:03 2008 +0900 @@ -0,0 +1,85 @@ +import java.applet.Applet; +import com.sun.j3d.utils.applet.MainFrame; +import javax.media.j3d.*; + +import java.awt.BorderLayout; + +import java.awt.GraphicsConfiguration; +import com.sun.j3d.utils.universe.*; +import com.sun.j3d.utils.geometry.ColorCube; +//import com.sun.j3d.utils.behaviors.vp.OrbitBehavior; +//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 javax.vecmath.*; + + +public class two_obj extends Applet { + + public SimpleUniverse universe = null; + public Canvas3D canvas = null; + + public BranchGroup createObjects(){ + BranchGroup root = new BranchGroup(); + + //TransformGroup transRoot = new TransformGroup(); + //Transform3D transform = new Transform3D(); + TransformGroup td3Root = addobj(new Vector3d(1.0, 0.0, 0.0)); + root.addChild(td3Root); + TransformGroup td3Root1 = addobj(new Vector3d(0.0, 0.0, 0.0)); + root.addChild(td3Root1); + + //transform.set(new Vector3d(1.0, 0.0, 0.0)); + //transRoot.setTransform(transform); + + //transRoot.addChild(new ColorCube(0.4)); + //root.addChild(transRoot); + +// root.addChild(new ColorCube(0.4)); + root.compile(); + + return root; + + } + + private TransformGroup addobj(Vector3d vec3d) { + TransformGroup td3Root = new TransformGroup(); + Transform3D t3d = new Transform3D(); + t3d.setTranslation(vec3d); + td3Root.setTransform(t3d); + td3Root.addChild(new ColorCube(0.4)); + return td3Root; + } + +// public void setOrbitBehavior() { +// +// // マウスでぐりぐりするための処理 +// OrbitBehavior orbit = new OrbitBehavior(canvas, OrbitBehavior.REVERSE_ALL); +// orbit.setSchedulingBounds( +// new BoundingSphere(new Point3d(0, 0, 0), 100.0)); +// universe.getViewingPlatform().setViewPlatformBehavior(orbit); +// } + + public void init() { + setLayout(new BorderLayout()); + + GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); + + Canvas3D canvas = new Canvas3D(config); + + add("Center", canvas); + + universe = new SimpleUniverse(canvas); + + universe.getViewingPlatform().setNominalViewingTransform(); + + // マウスでぐりぐり動かすための処理 +// setOrbitBehavior(); + + universe.addBranchGraph(createObjects()); + } + + public static void main(String[] args) { + new MainFrame(new two_obj(), 600, 600); + } +}