【问题标题】:AS3 Stage3D Fragment Shader?AS3 Stage3D 片段着色器?
【发布时间】:2012-08-31 12:33:30
【问题描述】:

谁能告诉我这两个片段着色器有什么区别:

// Adobe's GPUSprite Fragment Shader 
"tex ft0, v0, fs0 <2d,clamp,linear,mipnearest> \n" + 
"mul ft0, ft0, v0.zzzz\n" +  // multiply with alpha?? 
"mov oc, ft0 \n"

// Node2D Fragment Shader 
"tex ft0, v0, fs0 <2d,clamp,linear,mipnearest> \n" + 
"mul ft0, ft0, fc0\n" + // this line is different
"mov oc, ft0 \n" 

只有第二行不同,我们将它与 alpha 相乘。 因此,第二个着色器(Node2D)允许您通过 setProgramConstantsFromVector(Context3DProgramType.FRAGMENT, 0, [1,1,1,1]); 调用传入主 alpha 值,该调用将导致使用该 alpha 绘制所有三角形。

1)谁能告诉我第二行发生了什么?

2) 上述内容在实践中的作用是覆盖每个三角形的单独 alpha 设置。我想要的是它自己的 alpha 与着色器的,这样最终的 alpha 值将是 = Triangle_alpha * Shader_alpha

(因为现在我无法使用第二个着色器为特定三角形设置单独的 alpha 值。我想要的是能够分别为每个三角形设置一个 alpha 值,并为整个 drawTriangles 调用设置另一个)

【问题讨论】:

    标签: actionscript-3 assembly fragment-shader stage3d


    【解决方案1】:

    我想修改我的答案,因为原来的答案不正确。

    "mul ft0, ft0, v0.zzzz\n"
    

    将片段 RGBA 乘以存储在可变寄存器 0 中的值的第三个分量。这可能是顶点坐标,从顶点着色器传递到片段着色器。这条线应该使颜色变亮,离相机越远。

    "mul ft0, ft0, fc0\n"
    

    将片段 RGBA 乘以上传到片段常量 0 中的 RGBA 值。常量中的颜色越亮/越透明,您的最终值就越亮/越透明。

    如果您只想更改 alpha,您可以尝试:

    "mul ft0.a, ft0.a, fc0.a\n"
    

    如果您只想合并 alpha,您可以尝试相加而不是相乘。

    "add ft0.a, ft0.a, fc0.a\n"
    

    您可以通过在每个顶点中放置一个 alpha 分量来为每个三角形指定单独的 alpha 值。在将它们与片段 Alpha 组合之前,您可以将这些值与可以存储在常量中的“全局”Alpha 组合。唯一的问题是,如果顶点具有不同的 alpha 值,您将不得不复制它们。

    因此,示例三角形的顶点将来自:

    var vertices:Vector.<Number> = Vector.<Number>([
        //x, y, z, w,
        0, 0, 0, 0,
        1, 0, 0, 0,
        0, 1, 0, 0,
    ]);
    
    vertexBuffer:VertexBuffer3D = context3D.createVertexBuffer(3, 4);
    vertexBuffer.uploadFromVector(vertices, 0, 3);
    

    到:

    var vertices:Vector.<Number> = Vector.<Number>([
        //x, y, z, w, a
        0, 0, 0, 0, 0.5,
        1, 0, 0, 0, 0.5,
        0, 1, 0, 0, 0.5,
    ]);
    
    vertexBuffer:VertexBuffer3D = context3D.createVertexBuffer(3, 5);
    vertexBuffer.uploadFromVector(vertices, 0, 3);
    

    然后,您可以通过可变寄存器将 alpha 值从顶点着色器传递到片段着色器,您可以在其中使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 2019-03-04
      相关资源
      最近更新 更多