ホームに戻る
マウス
図08_00:マウスドラッグで三角が回転
/*
* JAVA3D でマウスアプレット
*/
import java.applet.Applet;
import java.awt.event.*;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.universe.*;
/* <applet code="java3Dtest08" width=300 height=300></applet> */
public class java3Dtest08 extends Applet{
private SimpleUniverse universe = null;
private Transform3D t3d = null;
private TransformGroup trans = null;
int new_x,old_x;
double rot_x = 0;
double old_rot_x = 0;
public BranchGroup createSceneGraph(){
BranchGroup root = new BranchGroup();
t3d = new Transform3D();
trans = new TransformGroup();
trans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
root.addChild(trans);
Point3d[] vertices = new Point3d[3];
vertices[0] = new Point3d(0.0, 0.5, 0.0);
vertices[1] = new Point3d(-0.433, -0.25, 0.0);
vertices[2] = new Point3d(0.433, -0.25, 0.0);
TriangleArray geometry = new TriangleArray(vertices.length, GeometryArray.COORDINATES | GeometryArray.COLOR_3);
geometry.setCoordinates(0, vertices);
Color3f red = new Color3f(1.0f, 0.0f, 0.0f);
Color3f green = new Color3f(0.0f, 1.0f, 0.0f);
Color3f blue = new Color3f(0.0f, 0.0f, 1.0f);
Color3f[] colors = {red, green, blue};
geometry.setColors(0, colors);
Shape3D shape = new Shape3D(geometry);
trans.addChild(shape);
Alpha rotationAlpha = new Alpha(-1, 0);
RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, trans);
root.addChild(rotator);
root.compile();
return root;
}
public void init(){
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas3d = new Canvas3D(config);
this.setLayout(new BorderLayout());
this.add(canvas3d, BorderLayout.CENTER);
BranchGroup scene = createSceneGraph();
universe = new SimpleUniverse(canvas3d);
universe.getViewingPlatform().setNominalViewingTransform();
universe.addBranchGraph(scene);
mouse_class mouse = new mouse_class();
canvas3d.addMouseMotionListener(mouse);
canvas3d.addMouseListener(mouse);
}
public void destroy(){
universe.cleanup();
}
class mouse_class implements MouseListener,MouseMotionListener{
public void mouseClicked(MouseEvent mouseevent){}
public void mouseEntered(MouseEvent mouseevent){}
public void mouseExited(MouseEvent mouseevent){}
public void mousePressed(MouseEvent mouseevent){}
public void mouseReleased(MouseEvent mouseevent){}
public void mouseMoved(MouseEvent event){
old_x = event.getX();
}
public void mouseDragged(MouseEvent event){
new_x = event.getX();
rot_x = (new_x - old_x)/(10* Math.PI) + old_rot_x;
t3d.rotY(rot_x);
trans.setTransform(t3d);
old_rot_x = rot_x;
if(old_rot_x > 2*Math.PI){
old_rot_x %= 2*Math.PI;
}
old_x = event.getX();
}
}
}