Forked from: sakef's PV3Dその7 エフェクト diff:97 forked from: PV3Dその7 エフェクト matsu forked:0favorite:0lines:77license : All rights reserved modified : 2009-03-16 12:33:00 Embed Tweet package { import flash.display.BlendMode; import flash.display.Sprite; import flash.events.Event; import flash.filters.BlurFilter; import flash.geom.ColorTransform; import flash.geom.Point; import org.papervision3d.cameras.Camera3D; import org.papervision3d.core.effects.BitmapColorEffect; import org.papervision3d.core.effects.BitmapLayerEffect; import org.papervision3d.core.effects.utils.BitmapClearMode; import org.papervision3d.core.effects.utils.BitmapDrawCommand; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Cube; import org.papervision3d.objects.special.ParticleField; import org.papervision3d.render.BasicRenderEngine; import org.papervision3d.scenes.Scene3D; import org.papervision3d.view.Viewport3D; import org.papervision3d.view.layer.BitmapEffectLayer; [SWF(width="465", height="465", backgroundColor="0x000000", frameRate="40")] public class PV3D_sample07 extends Sprite { private var container:Sprite; private var viewport:Viewport3D; private var scene:Scene3D; private var camera:Camera3D; private var renderer:BasicRenderEngine; private var rootNode:DisplayObject3D; private var bitmapEffectLayer:BitmapEffectLayer; private var cube:Cube; private var colorTransform:ColorTransform; public function PV3D_sample07() { container=new Sprite(); addChild(container); container.x=stage.stageWidth / 2; container.y=stage.stageHeight / 2; viewport=new Viewport3D(0, 0, true, true); scene=new Scene3D(); camera=new Camera3D(); renderer=new BasicRenderEngine(); rootNode=scene.addChild(new DisplayObject3D("rootNode")); addEventListener(Event.ENTER_FRAME, onFrame); addChild(viewport); camera.zoom=30; camera.focus=200; camera.target=DisplayObject3D.ZERO; // ビットマップ エフェクト レイヤー bitmapEffectLayer=new BitmapEffectLayer(viewport, stage.stageWidth, stage.stageHeight, true, 0, BitmapClearMode.CLEAR_PRE); bitmapEffectLayer.addEffect(new BitmapLayerEffect(new BlurFilter(2, 2, 4))); bitmapEffectLayer.addEffect(new BitmapColorEffect(0.99, 0.98, 0.98, 0.98)); colorTransform = new ColorTransform(0.1, 1, 0.1, 0.25); bitmapEffectLayer.drawCommand=new BitmapDrawCommand(null, colorTransform, BlendMode.ADD); bitmapEffectLayer.clippingPoint=new Point(0, -7); bitmapEffectLayer.drawLayer.blendMode=BlendMode.OVERLAY; viewport.containerSprite.addLayer(bitmapEffectLayer); // キューブ var colors:Array=[]; for(var i:int=0;i < 6;i++) colors[i]=new ColorMaterial(Math.floor(Math.random() * 0xFFFFFF), 0.7); var materials:MaterialsList=new MaterialsList({front:colors[0], back:colors[1], right:colors[2], left:colors[3], top:colors[4], bottom:colors[5]}); cube = new Cube(materials, 30, 30, 30, 4, 4, 4); rootNode.addChild(cube); bitmapEffectLayer.addDisplayObject3D(cube); } public function onFrame(e:Event):void { cube.rotationX++; cube.rotationY++; // 色変更(計算適当) colorTransform.blueMultiplier=mouseX / 500; colorTransform.greenMultiplier=mouseY / 500; colorTransform.redMultiplier=50 / mouseX; bitmapEffectLayer.drawCommand.colorTransform = colorTransform; renderer.renderScene(scene, camera, viewport); } } } Code Fullscreen Preview Fullscreen viewport container scene materials clippingPoint colorTransform BasicRenderEngine Viewport3D drawCommand BitmapLayerEffect BitmapDrawCommand rotationX mouseX rotationY DisplayObject3D.ZERO renderScene focus zoom blendMode target