【问题标题】:AS3 Stage3D: how to render all triangles with an overall alpha?AS3 Stage3D:如何使用整体 alpha 渲染所有三角形?
【发布时间】:2012-08-31 06:10:52
【问题描述】:

我正在处理一个 2D AS3 项目,其中不同的图层通过 Stage3D 在单个 drawTriangles() 调用中呈现为单个网格。 (如果你熟悉 BunnyMark GPUSprite 迷你渲染引擎,那会给你一个想法:http://www.bytearray.org/?p=4074

我想要绘制这些完整的“渲染层”之一,具有整体 alpha 透明度值,这将应用于所有绘制的三角形,并添加到它们自己的 alpha 值。

IE 我不希望通过使用具有 Alpha 透明度的纹理或必须通过单独设置每个三角形以具有相同的 Alpha 来更改 Alpha:我想要一个会影响所绘制所有内容的 Alpha 值的主开关? (计算上便宜的东西)

这可能吗?或许通过 Shader 或 setProgramConstantsFromVector 命令?

【问题讨论】:

    标签: actionscript-3 alpha alpha-transparency stage3d


    【解决方案1】:

    你可以将你的图层渲染成一个纹理,然后你可以把这个纹理放在舞台上,并带有你想要的 alpha,这样你的整个图层就会有相同的 alpha!

    您可以通过两种方式做到这一点,第一种方式是将其渲染为纹理,然后使用 Stage3D 显示该纹理并创建一个调整 alpha 的着色器。

    第二种方式是将其渲染为bitmapData,并在普通舞台上显示。我将举例说明这种方式:

    var bmd:BitmapData = new BitmapData(renderWidth, renderHeight, true, 0);
    var bit:Bitmap = new Bitmap(bmd);
    bit.alpha = 0.5;
    addChild(bit);
    
    //In your render loop at the beginning
    context3D.renderToBitmapData(bmd);
    

    【讨论】:

    • 感谢您的想法,但是由于该层只是“渲染层”三明治中的“层”之一,也许我弄错了,但是这种方法会弄乱视觉顺序?
    • 不,因为您不会在渲染时更改位图本身的位置和子索引,您只需更改视觉结构下的 BitmapData。使用这种方法,您可以拥有任意数量的图层,并根据需要进行渲染。除非您对 Bitmap 对象执行某些操作,否则它们不会改变位置,如您所见,这里不是这种情况,因为渲染例程只能访问 BitmapData。
    猜你喜欢
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多