【问题标题】:Actionscript 3 + AGAL to fade edges of plane transparentActionscript 3 + AGAL 淡化平面透明边缘
【发布时间】:2013-05-17 02:55:10
【问题描述】:

我在由 2 个三角形组成的简单 Stage3D 平面上显示 2D 内容。内容在 BitmapData 上绘制,并在重绘时作为纹理上传。我也有 AGAL 程序来为整个容器提供透明度。

我想做的是使用 GPU 为容器边缘提供“淡入透明”效果,以便与另一个容器很好地融合。也可以使用程序常量来控制褪色边缘。

目前正在使用此着色器代码:

顶点组装器:

"m44 op, va0, vc0 \n" + 
"mov v0, va0 \n" + // tell fragment shader about XYZ
"mov v1, va1 \n" + // tell fragment shader about UV
"mov v2, va2\n";   // tell fragment shader about RGBA

片段汇编器:

"tex ft0, v1, fs0 <2d,clamp,linear> \n" + 
"mul ft0.a, ft0.a, fc0.x\n" + // manage alpha value that is set as program constant
"mov oc, ft0 \n"; // move this value to the output color

非常感谢任何帮助或提示

【问题讨论】:

    标签: actionscript-3 stage3d agal


    【解决方案1】:

    透明度非常简单,尤其是在您提供的简单示例中。在这种情况下,您要做的是使用 UV 坐标创建 Alpha 蒙版。由于 UV 在 0 到 1 之间变化,一个简单的方法是在您的片段程序中:

    //assume [0.5, 2.0, 1.0, 10.0] is in fragment constant 0
    sub ft1.xy, va1.xy, fc0.xx  //subtract 0.5 from UV, and store in temporary register 1
    mul ft1.xy, ft1.xy, fc0.yy  //multiply UV by 2.0, UV now scaled from -1-to-0-to-1
    abs ft1.xy, ft1.xy  //UV now scaled from 1-to-0-to-1
    sub ft1.xy, fc0.zz, ft1.xy  //UV now scaled from 0-to-1-to-0
    pow ft1.xy, ft1.xy, fc0.ww  //UV has been turned into alpha, with fade controlled by fc0.w
    mul ft1.a, ft1.x, ft1.y  //combine U and V alpha into a single alpha value
    mul ft0.a, ft0.a, ft1.a  //combine UV-based alpha with existing alpha
    

    另外,不要忘记在 context3d 上启用透明度,如下所示:

    if(transparent)
        context3d.setBlendFactors(Context3DBlendFactor.SOURCE_ALPHA, Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA);
    else
        context3d.setBlendFactors(Context3DBlendFactor.ONE, Context3DBlendFactor.ZERO);
    

    否则您的透明像素将无法正确混合。

    最后一个警告。如果您计划将透明位图重叠到场景中的任何其他对象上,则绝对必须从相机以逆 z 顺序渲染场景中的对象。透明度是通过在缓冲区中已经渲染的像素之上渲染像素来处理的。如果您先渲染一个接近的透明对象,然后尝试渲染它后面的一个对象,z-buffer 检查将阻止更远的对象被绘制,您将无法获得所需的透明外观。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 2015-11-16
      • 1970-01-01
      • 2012-05-09
      • 2021-10-31
      相关资源
      最近更新 更多