ND3Dの被写界深度を使う

nd3d1

ND3Dは被写界深度を簡単に表現できるので
実際に試してみます。

被写界深度を表現するには、下の1行追加するだけです。

blurModeプロパティを設定することで
オブジェクトに対してボケがかかる。

render.blurMode = true;

distanceBlurプロパティで影響範囲を変化させています。
値を大きくすることで極端にボケを強くでき
逆に小さくすることでボケの範囲を弱めることができます。

render.distanceBlur = 100;

 

 

This movie requires Flash Player 9

被写界深度のピント効果が表現できます。
この簡易さがND3Dの魅力ではないでしょうか!

 

以下参考ソースになります。

package {
    import caurina.transitions.Tweener;
    import de.nulldesign.nd3d.events.*;
    import de.nulldesign.nd3d.geom.*;
    import de.nulldesign.nd3d.material.*;
    import de.nulldesign.nd3d.objects.*;
    import de.nulldesign.nd3d.renderer.*;
    import flash.display.*;
    import flash.events.*;
    import flash.ui.*;
    import flash.utils.*;
 
    public class Nd3dTest extends MovieClip{   
 
        private var render:Renderer
        private var camera:PointCamera
        private var renderChilds:Array=[]
 
        public function Nd3dTest () {
            if ( !stage )    addEventListener(Event.ADDED_TO_STAGE , test3D);
            else test3D();
        }
 
        private function test3D():void {
 
            /**
             * camera
             */
            camera = new PointCamera(stage.stageWidth, stage.stageHeight );
            camera.fl = 600;
            camera.z = -2000;           
 
            /**
             * renderer
             */
            render = new Renderer(this);
            render.blurMode = true;   
            render.distanceBlur = 100;
 
            /**
             * material
             */
            var earthMat:BitmapMaterial = new BitmapMaterial( new Earth(0, 0)  , false , true , false , true )
            var moonMat:BitmapMaterial = new BitmapMaterial( new Moon(0, 0) , false , true , false , true )   
 
            var sph:Sphere = new Sphere(12, 100 , earthMat );
            sph.rotateVerticesX(90)
            renderChilds.push(sph);
 
            var sph:Sphere = new Sphere(12, 30 , moonMat );
            sph.zPos = 100;
            sph.rotateVerticesX(90)
            renderChilds.push(sph);
 
            addEventListener(Event.ENTER_FRAME,  updateRender);
            Tweener.addTween( camera , {  z:150 , time:5 , transition:"easeInOutCubic"})
        }
 
        public var loop:Number=0
        private function updateRender(e:Event):void {
            (renderChilds[0] as Mesh).angleY += 0.01;
            (renderChilds[0] as Mesh).angleX += 0.01;
            (renderChilds[1] as Mesh).xPos = 200 * Math.cos(Math.PI / 180 * loop );
            (renderChilds[1] as Mesh).zPos = 200 * Math.sin(Math.PI / 180 * loop);
            (renderChilds[1] as Mesh).angleY += 0.05;
            loop ++;
 
            render.render(renderChilds , camera );
        }
 
    }
}

Filed under AS3, Nd3d · Tagged with , ,

Comments

One Response to “ND3Dの被写界深度を使う”

Trackbacks

Check out what others are saying about this post...
  1. [...] Go here to read the rest: ND3Dの被写界深度を使う | wszz No Related Post View the Contact Powered by さっそく ざつだん [...]



Speak Your Mind

Tell us what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!

You must be logged in to post a comment.