2012-04-19 20 views
0

私はas3でPapervision3Dでaroungをだましています。私は現在、BitmapEffectLayerに固執しています。オブジェクトにエフェクトを追加したい場合、エフェクトのあるオブジェクトは常にすべてのものの前にレンダリングされます。つまり、cordinatシステム内の別のオブジェクトの背後にあるにもかかわらず、それはそのフレームの前に描画されます。 いくつかのソースコードを参考にしてください。as3のPapervision3Dでの問題

spherer = new Sphere(shadedMaterial, 120, 20, 14); 
     //spherer.x = 0; 
     //spherer.y = 0; 
     //spherer.z = 0; 

     displayEarth = new DisplayObject3D(); 
     displayEarth.x =0; 
     displayEarth.y = 0; 
     displayEarth.z = 0; 
     displayEarth.addChild(spherer); 


     smallSphere = new Sphere(flatMaterial, 10, 10, 10); 

     smallSphere.x = 0; 
     smallSphere.z = 130; 
     smallSphere.y = 00; 

     displayEarth.addChild(smallSphere); 
     //scene.addChild(smallSphere); 
     scene.addChild(light); 


     var partMaterial:ParticleMaterial = new ParticleMaterial(0x000000, 1.0, ParticleMaterial.SHAPE_CIRCLE); 
     var part:Particle = new Particle(partMaterial, 3, 0, -150, 30); 
     var part2:Particle = new Particle(partMaterial, 3, 0,0,135); 
     var partsHolder:Particles = new Particles(); 
     partsHolder.addParticle(part); 
     parrr.push(part); 
     partsHolder.addParticle(part2); 
     parrr.push(part2); 

     var effectLayer:BitmapEffectLayer = new BitmapEffectLayer(viewport, stage.stageWidth, stage.stageHeight, true, 0x000000, BitmapClearMode.CLEAR_PRE); 
     effectLayer.drawLayer.blendMode = BlendMode.OVERLAY; 

     effectLayer.addDisplayObject3D(smallSphere); 
     viewport.containerSprite.addLayer(effectLayer); 

     displayEarth.addChild(partsHolder); 

     scene.addChild(displayEarth); 
     effectLayer.addEffect(new BitmapLayerEffect(new BlurFilter(2,2,2))); 

そして今、effectLayerに添付された「smallSphere」は、常に「球」のインフロントレンダリングされます。 ご協力いただければ幸いです! - デビッド

答えて

1

あなたはそれ自身の層にDisplayObject3Dを設定する(.useOwnContainer = true;が最も簡単なオプションであること、基本的にあなたが3Dオブジェクトは、2Dの典型的な表示リスト上の別の2Dスプライトに描画することを得るViewportLayerを使用すると、それが簡単に、これを制御することができます。スタッキング/オーダーする場合は、Andy Zupko's detailed post on ViewportLayersを必ず読んでください。3Dオブジェクトを2Dレンダリングレイヤーに追加すると、並べ替えに対処する必要があります。たとえば、3Dオブジェクトのz位置を確認したり、オブジェクトが3Dで多く動く場合は、レイヤーをソートします。このタイプの操作を実行するときは、明らかに速度が緩いので、少しばかり計画するのが最善です(シーンの動き、何が動きませんか、効果を加えるなど)

また、Papervision3Dプロジェクトが今更新されていないことを心に留めておくと良いでしょう。現在のところ、ソフトウェアレンダリングのみを提供しています(Flash Player 9で、一部はFlash Player 10の新しい描画APIと思われますが、おそらく安定版ではないと思います)。 Away3Dは現在開発中ですので、ご覧になりたいかもしれません。 Flash Player 10ソフトウェアのレンダリングAPI、または軽量のAway3DLiteバージョン(これはPapervision3Dよりも高速です)を使用できますが、ハードウェアアクセラレーションを使用するAway3D 4.0バージョンもあります。