【问题标题】:Stage3D porting GLSL to AGALStage3D 将 GLSL 移植到 AGAL
【发布时间】:2013-02-12 15:30:10
【问题描述】:

我正在尝试将此 GLSL 着色器移植到 Stage3D 和 AGAL,但我无法使其工作:

顶点着色器 (GLSL)

attribute vec3 aVertexPosition;
    attribute vec4 aVertexColor;

    uniform mat4 uMVMatrix;
    uniform mat4 uPMatrix;

    varying vec4 vColor;

    void main(void) {
        gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
        vColor = aVertexColor;
    }

片段着色器 (GLSL)

    precision mediump float;

    varying vec4 vColor;

    void main(void) {
        gl_FragColor = vColor;
    }

结果:

顶点着色器 (AGAL)

mov vt0.w, vc0.x
mov vt0.xyz, va0.xyz

mov vt1.xyzw, vc1
mul vt5.xyzw, vt1, vc5
m44 op.xyzw, vt0.xyzw, vt5
mov v0.xyzw, va1.xyzw

片段着色器 (AGAL)

mov oc.xyzw, v0.xyzw

这是我执行的指令的痕迹:

(setVertexBufferAt) va0 3 0
(setVertexBufferAt) va1 4 3
(identity setProgramConstantsFromMatrix): vc0 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1
(setProgramConstantsFromMatrix) vc1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,-2,1
(setProgramConstantsFromMatrix) vc5 1.8106601238250732,0,0,0,0,2.4142136573791504,0,0,0,0,-1.0020020008087158,-1,0,0,-0.20020020008087158,0
render drawTriangles + present

但我还是什么都看不到。

更新: 显然问题是三角形被剪裁了。相乘数组上的值大于 1.0,这使得它们被剪掉。所以我需要找到一种方法来规范化矩阵或扩展剪辑

有什么建议吗?

【问题讨论】:

  • 两个想法: 1. 如果从矩阵的寄存器访问中删除“.xyzw”会发生什么? 2、va0中没有z分量。看起来它只有一个 x 和一个 y (基于您的跟踪)。这是正确的吗?
  • @bwroga 我刚刚找到了可能的原因之一。

标签: actionscript-3 shader vertex-shader stage3d agal


【解决方案1】:

在这里挖掘一个旧帖子,但为了以后的任何搜索,您应该真正检查一下:

https://github.com/adobe/glsl2agal

它的工作原理与您希望的一样 - 将有效的 glsl 顶点/片段着色器程序作为输入,将有效的 agal 作为输出。

例如: http://www.cmodule.org/glsl2agal/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2016-07-13
    • 2011-03-06
    • 2017-06-09
    • 2015-02-24
    相关资源
    最近更新 更多