//******************************************************** // 球の場所と色がランダムに変化するアニメーション //******************************************************** /*・・・・・・・・・・・・・・・・・・・・ プログラムに必要なパッケージの取り込み ・・・・・・・・・・・・・・・・・・・・*/ import java.applet.*; import java.awt.*; import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.applet.MainFrame; import java.util.Random; /*・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ アプレットの作成 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・*/ public class AnimationRand extends Applet implements Runnable{ Transform3D transform3D = new Transform3D(); TransformGroup transformGroup = new TransformGroup(); Canvas3D canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); BorderLayout borderLayout = new BorderLayout( ); SimpleUniverse simpleUniverse = new SimpleUniverse( canvas3D ); BranchGroup objRoot = new BranchGroup( ); BoundingSphere boundingSphere = new BoundingSphere(); DirectionalLight directionalLight = new DirectionalLight( ); Appearance appearance = new Appearance( ); Material material = new Material( ); Sphere sphere = new Sphere( 0.1f, Sphere.GENERATE_NORMALS, appearance ); Random ransuu = new Random(); Color3f color3f = new Color3f(1.0f, 1.0f, 1.0f); Thread th; float g_i = 0.0f; public AnimationRand( ){ transformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); transformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); material.setCapability(Material.ALLOW_COMPONENT_READ); material.setCapability(Material.ALLOW_COMPONENT_WRITE); appearance.setCapability(Appearance.ALLOW_MATERIAL_WRITE ); this.setLayout( borderLayout ); this.add( canvas3D, BorderLayout.CENTER ); simpleUniverse.getViewingPlatform( ).setNominalViewingTransform( ); directionalLight.setInfluencingBounds( boundingSphere ); objRoot.addChild( directionalLight ); appearance.setMaterial( material ); transform3D.setTranslation( new Vector3f(0.5f, 0.5f, 0.0f)); transformGroup.setTransform( transform3D ); transformGroup.addChild( sphere ); objRoot.addChild( transformGroup ); simpleUniverse.addBranchGraph( objRoot ); th = new Thread(this); th.start(); } //end of public AnimationRand() /*・・・・・・・・・・・・・・・・・・・・・・・ 作成したクラスファイルの呼び出し ・・・・・・・・・・・・・・・・・・・・・・・*/ public static void main( String[ ] argV ){ AnimationRand animationRand = new AnimationRand( ); MainFrame mainFrame = new MainFrame( animationRand, 500, 500 ); } //end of main // この部分にアニメーションを書く public void run(){ int t; float x,y,z; for(t=0; t<200; t++){ // 繰り返す // if(t<75) x = x + 0.01f; else x = x - 0.01f; try { x = ransuu.nextFloat() ; y = ransuu.nextFloat() ; z = ransuu.nextFloat() ; material.setDiffuseColor(x, y, z); appearance.setMaterial(material); x = ransuu.nextFloat() - 0.5f ; y = ransuu.nextFloat() - 0.5f ; z = ransuu.nextFloat()*2.0f - 1.0f ; transform3D.setTranslation( new Vector3f(x , y, z)); transformGroup.setTransform( transform3D ); Thread.sleep(300); } catch(InterruptedException e) { } }//end of for(t=0; t<=100; t++) }//end of public void run() }