迫ってくるかんじ
仕事が落ち着いてきたので、引き続き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); } } }