0

我在 as3 中玩 Papervision3D。我目前被 BitmapEffectLayer 困住了。当我想为对象添加效果时,具有效果的对象将始终呈现在所有内容的前面。这意味着,即使它在 cordinat 系统中的另一个对象后面,它也会被拉到它前面。这是一些源代码,不知道它是否有帮助。

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”将始终呈现在“sphere”的前面。任何帮助表示赞赏!- 大卫

4

1 回答 1

1

当您将 DisplayObject3D 设置为它自己的图层时(.useOwnContainer = true;作为最简单的选项,本质上您会将该 3D 对象渲染到 2D 典型显示列表上的单独 2D 精灵中。使用ViewportLayer可以更容易地控制此堆叠/排序,因此请务必阅读通过Andy Zupko 在 ViewportLayers 上的详细帖子。这个想法是,如果您将 3D 对象添加到 2D 渲染层,您将不得不处理排序。例如,您可以检查 3D 对象的 z 位置并基于该排序层如果对象在 3D 中移动很多。在执行此类操作时,您显然会降低速度,因此最好稍微计划一下(例如,场景中什么移动,什么不移动,添加效果的优缺点是什么, ETC。)

此外,记住 Papervision3D 项目已经有一段时间没有更新可能是个好主意。它目前只提供软件渲染(使用 Flash Player 9,我认为部分使用 Flash Player 10 的新绘图 API,但可能不在稳定分支中)。您可能想看看Away3D,因为它目前仍在开发中。您可以使用 Flash Player 10 软件渲染 API 甚至是轻量级的 Away3DLite 版本(我认为它比 Papervision3D 更快),但还有使用硬件加速的 Away3D 4.0 版本。

于 2012-04-19T12:35:57.640 回答