PV3D ReflectionView その2

ちょっと前に紹介したPV3DのReflectionViewですが、紹介だけでは悲しいので制作者さん(?)のサイトで紹介されているサンプルコードにちょっと追加してみたものと簡単な解説です。

サンプルSWF
(MTでSWF貼るのにいい方法ないだろうか)

で、続いてちょっと手を加えたサンプルコード。

珍しくコードの最初から最後までドーン!

package {
    import flash.events.Event;
    import flash.filters.BlurFilter;

    import org.papervision3d.cameras.Camera3D;
    import org.papervision3d.core.effects.view.ReflectionView;
    import org.papervision3d.materials.ColorMaterial;
    import org.papervision3d.materials.utils.MaterialsList;
    import     org.papervision3d.materials.BitmapAssetMaterial;
    import org.papervision3d.objects.primitives.Cube;
    import org.papervision3d.objects.primitives.Sphere;

    public class ReflectionCubeSimple extends ReflectionView
    {

        private var cube:Cube;
        private var s:Sphere;

        public function ReflectionCubeSimple()
        {

            super(400,400,false, false);

            //the height of the reflection plane
            surfaceHeight = -100;

            // 反射面にブラー適用
            viewportReflection.filters = [new BlurFilter(8, 8, 1)];

            // 反射面のカラーを変化させる
            //setReflectionColor(0, 50, 0, 0, 50, 0);

            initCube();
            initSphere();

            camera.z = -800;

            addEventListener(Event.ENTER_FRAME, enterFrame); 

        }


        public function initCube() : void
        {

            // create a materials list for the cube.
            var ml : MaterialsList = new MaterialsList(); 
            ml.addMaterial(new ColorMaterial(0x880000), "all"); 
             ml.addMaterial(new ColorMaterial(0x660000),"right"); 
            ml.addMaterial(new ColorMaterial(0x440000),"bottom"); 
              ml.addMaterial(new ColorMaterial(0xdd0000),"top"); 
            ml.addMaterial(new ColorMaterial(0xdd0000),"left"); 

            cube = new Cube(ml,100,100,100); 
            cube.x = 200;

            // add the cube to the scene
            scene.addChild(cube); 
        }

        private function initSphere() {
            var material = new BitmapAssetMaterial("worldmap");
            s = new Sphere(material);
            s.x = -200;
            scene.addChild(s);
        }

        public function enterFrame(e:Event) : void
        {
            // rotate the cube dependent on the mouse position
            cube.yaw((320-mouseX)*0.05);
            cube.y = (150-(mouseY/2));

            if(cube.y<0) cube.y = 0;

            s.yaw((320-mouseX)*0.05);
            s.y = (150-(mouseY/2));

            if(s.y<50) s.y = 50;

            singleRender();

        }
    }
}

サンプルコードにSphereのコードを追加しただけなので、普段の自分のコーディングと少し違うし、ちょいと違和感があります。

surfaceHeight
Heightってなってるんですが、これは反射面のy軸の位置指定です。 サンプルでは-100を指定していて、CubeのHeightも100なのでCube.yが0のときに、Cubeの底面と反射面が接触します。Heightっていう使い方は3D的な用語の使い方なんだろうか、わからん。
viewportReflection.filters = [new BlurFilter(8, 8, 1)];
これでフィルタ適用できます。
setReflectionColor()
反射面のカラーを変化させます。 正直、サイトの英語の解説見ても英語がわからんので、なんとなく「色を変える」しかわからなかったので、クラスを直接除いてみたら、内部でColorTransformやってるだけでした。 ColorTransform使ったことないから、どういう指定したらいい感じになるのかわかりませんが、とにかく、setReflectionColor()のパラメータもColorTransformとまったく同じです。

こんなとこです。

トラックバック(0)

このブログ記事に対するトラックバックURL: http://eternitydesign.net/mt/mt-tb.cgi/202

コメントフォーム

AUTHOR

名古屋でひっそりと活動中。
ホームページ制作、Flashコンテンツ制作など制作依頼がありましたらお気軽にご連絡ください。
ご希望の方には制作実績も同時にお伝えいたします。

TAG CLOUD