calendar

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
<< November 2019 >>

categories

archives

PV3D2.0(Beta)のCamera3D

0
    Beta版になってFreeCamera3DとFrustumCamera3DがCamera3Dに統合されたようです。
    カメラは3種類タイプがあって、BasicViewでもコンストラクタ引数で指定できます。

    CameraType.DEBUG
    //デバッグ用カメラ beta版から追加された。
    カメラステータスが左上に表示されるのと、キーボードでカメラを動かしたりできる。
    camera = new DebugCamera3D(viewport);

    CameraType.TARGET
    //指定した一点を常に向いているカメラ。 alpha版のCamera3Dみたい
    camera = new Camera3D(60);
    camera.target = DisplayObject3D.ZERO;

    CameraType.FREE
    //フリーカメラ。alpha版のFreeCamera3Dみたい
    camera = new Camera3D(60);

    で、FrustumCamera3Dは?というと、Camera3Dのコンストラクタの引数でパラメータを指定すれば同じような挙動を制御できます。
    (BasicViewでは指定するところがないのでできないかも)

    var fov:Number=60;
    var near:Number=10;
    var far:Number=5000;
    var useCulling:Boolean = true;
    camera = new Camera3D(fov, near, far, useCulling);

    ポイントは4つ目のuseCullingをtrueにしないと、fov,near,farの設定が生きないところ。

    useCullingの簡単なデモ

    デモはこちら ソースはこちら

    遠くのCubeがカリングされているのが分かります。

    ちなみに、
    ・カメラ固定してオブジェクトを移動
    ・カメラ移動してオブジェクトを固定
    をstatsViewで比較してみたところ、前者の方が速いみたいです。

    それから以下2点は注意。

    camera.zoomは設定値が1/10になっている。
    旧(alpha版):camera.zoom = 5; は
    新(beta版) :camera.zoom = 50; にする

    ∈舵厳蓮扮手・左手)の設定が追加にされた。
    import Papervision3D;して
    Papervision3D.useRIGHTHANDED (Boolean)で設定可能。

    コメント
    ぽりGさんこんばんは!
    サイト拝見させていただいてます!

    現在AS3、papervision3dの勉強をしているのですが、そこで一つ疑問が浮かびまして・・・

    以下はムービークリップ(mc001)にシェイプ(sh002)を追加して、後でムービークリップの中のシェイプ、maru3のインスタンス名をつけられたものだけを動かすプログラムなんですが・・・


    -----------------------------ソースここから
    var mc001:MovieClip = new MovieClip();
    addChild(mc001);

    for (var j:int = 3; j<5; j++) {
    mc001.sh002 = new Shape();
    mc001.sh002.graphics.beginFill(0xff0000);
    mc001.sh002.graphics.drawCircle(0,0,50);
    mc001.sh002.graphics.endFill();
    mc001.sh002.y=100;
    mc001.sh002.x=100*j;
    mc001.sh002.name = "maru"+j;
    mc001.addChild(mc001.sh002);
    trace(mc001.sh002.name);
    }

    //////////////////////////////////////////////////動き
    addEventListener( Event.ENTER_FRAME, this.loop3D );
    function loop3D( event:Event ):void {
    mc001.getChildByName("maru3").y=mouseY;
    //mc001.sh002.y = mouseY;
    }

    ----------------------------------ソースここまで


    そこで、今度はコレと同じようなことをpapervision3dでやりたい!ということでやってみたんですが、どうもうまくいきません・・・

    -------------------------ソースここから(途中省略してあります)

    var h001:Array = new Array(9);
    var do001:DisplayObject3D = new DisplayObject3D();
    scene.addChild(do001);
    do001.name = "HD1";


    for (var j:int = 0; j<10; j++) {
    do001.DPlane = new Plane( mat1, 5,5, 1, 1);
    do001.DPlane.x = 30*j;
    do001.addChild(do001.DPlane);
    do001.DPlane.name = "DP"+j;
    }


    this.addEventListener( Event.ENTER_FRAME, this.loop3D );////////毎フレームレンダリング開始
    function loop3D( event:Event ):void {
    renderling();
    do001.getChildByName("DP1").y=mouseY;
    do001.DPlane.y = mouseY;
    }

    ------------------------------------ソースここまで



    DPlaneにアクセスする場合、sceneの扱いをどのようにしたら良いかという事に関しても理解が浅いというのが原因の一つだと思いますが・・・

    他にも、sceneやDisplayObject3Dがダイナミッククラスなのか、という問題も・・・



    長々と書いてしまいましたが、入れ子になったオブジェクトに対するアクセスで、papervision3dの場合はどうなるのかというと所が主にわかりません・・・


    突然失礼いたしました・・・
    • Skizi
    • 2008/11/14 4:35 AM
    すみません、ソース下部での記入ミスです。

    do001.DPlane.y = mouseY;

    ではなく、

    //do001.DPlane.y = mouseY;

    でした・・・
    • Skizi
    • 2008/11/14 4:38 AM
    通常2DでいうDisplayObjectを3Dの場合DisplayObject3Dと置き換えて考えれば自ずと分かると思いますよ。

    あとはライブラリ見てどのクラスがどのクラスを継承しているかを一通り調べる事をおススメします。全体の構成が把握できるのでより理解が深まるかと思いますので〜
    • polig
    • 2008/11/16 1:12 AM
    管理者の承認待ちコメントです。
    • -
    • 2018/04/02 1:22 PM
    コメントする








       
    この記事のトラックバックURL
    トラックバック