calendar

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

categories

archives

PV3D:Beta版の機能をいろいろ調べてみた

0
    PV3D2.0がBetaになったということで、気になった機能をいろいろ調べた結果をまとめてみました。(内容的に間違っている部分あると思います、お気を付けくださいw)

    ParticleField

    デモはこちら ソースはこちら
    まとめてParticle(粒々)を追加できるParticleFieldは、粒の大きさを引数で指定できるようになりました。

    ↓↓↓コード↓↓↓

    var mf:ParticleMaterial = new ParticleMaterial(0xFFFFFF, 1);
    var pf:ParticleField = new ParticleField(mf, 1000, 5, 1000, 1000, 1000);
    //マテリアル、Particleの数、Particle一粒の大きさ、空間幅、空間高さ、空間奥行を指定
    scene.addChild(pf);



    SimpleLevelOfDetail

    デモはこちら ソースはこちら
    カメラからの距離によってポリゴン数を変化させる。(近くは細かく、遠くは粗く)
    上の画像では左が遠く右が近いのですが、線の数が違うのがわかります。

    ↓↓↓コード↓↓↓
    var objects:Array = new Array();
    var wMat:WireframeMaterial = new WireframeMaterial();
    for(var i:int=8;i<24;i++){
      objects.unshift(new Sphere(wMat, 100, i, i-2));
    }

    var distances:Array = null;
    distances = [1000, 1500, 1600, 3000];

    simple = new SimpleLevelOfDetail(objects, 0, 2000, distances);
    scene.addChild(simple);

    object配列に距離毎のDisplayObject3Dを代入、distances配列にどの距離で切り替えるかを代入、それぞれをSimpleLevelOfDetailへ引数として渡す。
    で、ENTER_FRAMEとかでsimple.updateLoD();ってやると距離に応じたオブジェクトが表示されます。デモみたいなPrimitiveじゃなくて複雑なColladaモデルとかで効果を発揮しそう。



    FogFilter

    デモはこちら ソースはこちら
    カメラからの距離に応じて、Fog(霧)をかける。

    ↓↓↓コード↓↓↓
    var fmt:FogMaterial = new FogMaterial(0xcc0000);
    renderer.filter = new FogFilter(fmt, 20, 1000, 10000);
    //マテリアル、深度度合の数, 最少深度、最大深度を指定

    上のSimpleLevelOfDetailと組み合わせて使うとよさげ。



    BitmapEffectLayer

    デモはこちら ソースはこちら
    今回自分的に一番感動したのがこれ。

    ↓↓↓コードはこんな感じ↓↓↓
    var bfx:BitmapEffectLayer = new BitmapEffectLayer(viewport, stage.stageWidth, stage.stageHeight, true, 0, BitmapClearMode.CLEAR_PRE);
    bfx.addEffect(new BitmapLayerEffect( new BlurFilter(3,3,1))); //ぼやける
    bfx.addEffect(new BitmapColorEffect(0.99, 0.98, 0.98, 0.98)); //黄色・赤っぽくなる
    bfx.drawCommand = new BitmapDrawCommand(null, new ColorTransform(1, 0.2, 0.1, 0.45), BlendMode.ADD);
    bfx.drawLayer.blendMode = BlendMode.OVERLAY;
    viewport.containerSprite.addLayer(bfx);

    var mat1 = new WireframeMaterial(0xffffff,100,0);
    var cube1 = new Cube(new MaterialsList({all:mat1}),150, 150, 150, 1, 1, 1, 0, 0);
    scene.addChild(cube1);
    bfx.addDisplayObject3D(cube1);

    viewportにエフェクトの内容を設定して、表示オブジェクトと紐付けることで実現できると。自分もFilterってコードではあまり書いたことないんで、要勉強ですね。

    あとやってて思ったこと幾つか。
    ・camera.zoom 設定値が1/10になったっぽい。
    ・Papervision3D.useRIGHTHANDED(true/false)というプロパティが追加されたけど、これ切り替えると左右が入れ替わって上下は逆さのまま・・・よくわからんw

    コメント
    コメントする








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