Murayama blog.

プログラミング教育なブログ

迫ってくるかんじ

仕事が落ち着いてきたので、引き続きPV3Dをさわってみます。
いろいろと発見があって楽しい。


本日の成果はこちら。



今回気づいたのは、、

  • CompositeMaterial
    • 複数のマテリアルを集約できちゃうみたい。ColorMaterialだけだと物足りないので、WireframeMaterialも混ぜるとキレイに見える。
  • MaterialsList
    • "all"とするとCubeを作るのが楽。6面作らないでいいから楽。
  • 数が多いとそれっぽく見える。
    • for文書くだけで雰囲気は偉い違う。実は何もスゴいことしてない。


以下、ソース。

package
{
	import flash.events.Event;
	
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.materials.special.CompositeMaterial;
	import org.papervision3d.materials.special.ParticleMaterial;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.objects.primitives.Cube;
	import org.papervision3d.objects.special.ParticleField;
	import org.papervision3d.view.BasicView;

    [SWF(backgroundColor=0x000000)]	
	public class CubeSpace extends BasicView
	{
		private var space:Number = 4000;
		private var cubeList:Array = [];
		public function CubeSpace()
		{
			for(var i:int = 0; i < 30; i++){
				var compositMaterial:CompositeMaterial = new CompositeMaterial();
				compositMaterial.addMaterial(new ColorMaterial(0xFFFFFF * Math.random(), 1))				
				compositMaterial.addMaterial(new WireframeMaterial(0xFFFFFF * Math.random()))				
				var materialsList:MaterialsList = new MaterialsList();
				materialsList.addMaterial(compositMaterial, "all");
				var cube:Cube = new Cube(materialsList);
				cube.x = space * Math.random() - space / 2;
				cube.y = space * Math.random() - space / 2;				
				cube.z = space * 2 * Math.random() + space * 2; // なんとなく
				cube.rotationX += Math.random() * 360;
				cube.rotationY += Math.random() * 360;
				cube.rotationZ += Math.random() * 360;
				cubeList.push(cube);
				scene.addChild(cube);				
			}
			startRendering();
		}
		
		override protected function onRenderTick(event:Event=null):void
		{
			for(var i:int; i < cubeList.length; i++){
				var cube:Cube = cubeList[i];
				cube.rotationX += 1;
				cube.rotationY += 1;
				cube.rotationZ += 1;				
				cube.z -= 20
			}
			super.onRenderTick(event);
		}
	}
}