【AS3】DispalyObject3Dの頂点データを取得

| コメント(0) | トラックバック(0)

PV3Dでオブジェクトの頂点座標を取得し、その位置を移動してみます。

DispalyObject3DVertex3Dで表される頂点のデータをもとに形成されています。

頂点座標は配列で管理されており、下記の方法で取得できます。

var array:Array = DispalyObject3D.geometry.vertices

どの点がどこを指すかは一つ一つ調べていくしかないみたいです。
これようにチェッククラスみたいなのを作っておいた方が便利かもしれないですね。

サンプル

JavascriptをONにし、最新のFlashプレーヤーをインストールしてください。

ドキュメントクラス

package
{
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
    import net.hires.debug.Stats;
    import org.papervision3d.core.geom.renderables.Vertex3D;
    import org.papervision3d.materials.BitmapMaterial;
    import org.papervision3d.objects.primitives.Plane;
    import org.papervision3d.view.BasicView;
    public class Main extends BasicView
    {
        private var _plane:Plane;
        private var _segW:uint = 10;
        private var _segH:uint = 10;
        private var _rad:Number = 0;
        private var _speed:Number=0.2;
        private var _delay:Number = 10
        public function Main():void
        {
            super(0, 0, true);
            _init()
        }
        private function _init():void
        {
            var bmd:BitmapData = new Img(0, 0);
            var bm:BitmapMaterial = new BitmapMaterial(bmd)
            bm.doubleSided = true;
            bm.smooth = true;
            _plane = new Plane(bm, 300, 300, _segW, _segH);
            scene.addChild(_plane);

            startRendering();
            addEventListener(Event.ENTER_FRAME, _onEnterFrameHandler);

            addChild(new Stats())
        }
        private function _wave():void
        {
            for ( var i:String in _plane.geometry.vertices )
            {  
                var v3d:Vertex3D = _plane.geometry.vertices[i] as Vertex3D;//頂点データ
                var h:Number = v3d.x * v3d.y / (300*300) * _delay;
                v3d.z = 40 * Math.sin(_rad + h);
            }
            _rad += _speed;
        }
        private function _onEnterFrameHandler(e:Event):void 
        {
            _plane.yaw((mouseX - (stage.stageWidth >> 1) ) / 30);
            _plane.pitch((mouseY - (stage.stageWidth >> 1)) / 30);
            _wave();
        }
    }
}

Planeの頂点を取得し、そのx,yの座標に応じてz値を変化させてみました。

42行目でDispalyObject3Dが持つ各頂点座標を取得しています。
Vertex3Dが頂点を示しx,y,zを操作可能です。

分割数は10*10ですが、意外と滑らかに波打ってくれてました。

トラックバック(0)

トラックバックURL: http://www.nanlow.com/mt/mt-tb.cgi/65

コメントする

このブログ記事について

このページは、nanlowが2009年7月27日 04:09に書いたブログ記事です。

ひとつ前のブログ記事は「【AS3】PV3D 2.0でモデリングデータを使用:その2(アニメーション)」です。

次のブログ記事は「【AS3】wonderflしてみた。」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。