アットウィキロゴ

JAVA 26 26 26

import java.awt.*;
import javax.swing.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.geometry.Box;
import java.util.*;
import java.util.Timer;

public class ex26
{

TransformGroup transform_group;
Transform3D transform1;
Transform3D transform2;
Transform3D transform3;

public static void main(String[] args)
{  
  ex26 test = new ex26();
}

public ex26()
{
  JFrame frame = new JFrame();
  frame.setSize(500,500);
  frame.setTitle("Timer_test2");
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  JPanel cp = new JPanel();
  cp.setLayout(null);
  frame.add(cp);

  GraphicsConfiguration g_config = SimpleUniverse.getPreferredConfiguration();
  Canvas3D canvas = new Canvas3D(g_config);
  canvas.setBounds(0,0,500,500);
  cp.add(canvas);

  SimpleUniverse universe = new SimpleUniverse(canvas);
  frame.setVisible(true);

  ViewingPlatform camera = universe.getViewingPlatform();
  camera.setNominalViewingTransform();

  Color3f light_color = new Color3f(1.4f,1.4f,1.4f);
  Vector3f light_direction = new Vector3f(0.0f,-0.5f,-1.0f);
  DirectionalLight light = new DirectionalLight(light_color,light_direction);
  BoundingSphere bounds = new BoundingSphere();
  light.setInfluencingBounds(bounds);
  BranchGroup group2 = new BranchGroup();
  group2.addChild(light);
  universe.addBranchGraph(group2);

  Appearance appearance = new Appearance();
  Material material = new Material();
  material.setDiffuseColor(0.2f,0.3f,0.9f);
  appearance.setMaterial(material);
  Box cone = new Box(0.2f,0.2f,0.8f,appearance);

  BranchGroup group1 = new BranchGroup();
  transform_group = new TransformGroup();
  transform_group.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
  transform_group.addChild(cone);
  group1.addChild(transform_group);
  universe.addBranchGraph(group1);

  transform1 = new Transform3D();
  transform2 = new Transform3D();
  transform3 = new Transform3D();

Timer timer = new Timer();
  
  //タイマーの処理内容として、Messageクラスを設定。呼び出し間隔は0.1秒に設定。
  timer.schedule(new timer_task(),0,100);
  
}

class timer_task extends TimerTask
{
  //回転角を入れる変数
  float rad1=0;
  float rad2=0;  
  float rad3=0;

  //タイマー割り込みによる処理内容を記述
  public void run()
  {
   //回転角を増やします
   rad1+=Math.PI/20;
   rad2+=Math.PI/30;
   rad3+=Math.PI/40;

   //オーバーフロー防止
   rad1%=(Math.PI*2);
   rad2%=(Math.PI*2);
   rad3%=(Math.PI*2);

   //回転の座標変換実行
   transform1.rotX(rad1);
   transform2.rotY(rad2);
   transform3.rotZ(rad3);

   //座標変換を合成します。
   transform2.mul(transform3);
   transform1.mul(transform2);
  

   //TransformGroupにTransform3Dを登録。
   transform_group.setTransform(transform1);

  }

}

}
最終更新:2010年01月07日 13:41