flashゲーム作成記

趣味でflashゲームを作成するにあたっての技術ネタ(作り方)、作品公開、体験記など。技術ネタとしては主にPV3D(Papervision3D:flashで3D表現をするためのAPI)の研究を行っています。
<< February 2010 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 >>
 
RECENT COMMENT
RECENT TRACKBACK
PROFILE
 
PV3D:Beta版の機能をいろいろ調べてみた
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
http://flash.polig.daa.jp/trackback/876232
 

Copyright (C) 2004-2010 lolipop Some Rights Reserved.

Powered by ロリポブログ