ホームに戻る
 マウス

図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();
    }
  }
}

inserted by FC2 system