【问题标题】:Stage3d shader weird behavior adding variableStage3d着色器奇怪的行为添加变量
【发布时间】:2013-03-07 11:18:17
【问题描述】:

我正在使用这个着色器,结果如下:

<script id="per-fragment-lighting-vs2" type="x-shader/x-vertex">
    attribute vec3 aVertexPosition;
    attribute vec3 aVertexNormal;
    attribute vec2 aTextureCoord;

    uniform mat4 uMVMatrix;
    uniform mat4 uMV2Matrix;
    uniform mat4 uPMatrix;
    uniform mat3 uNMatrix;

    varying vec2 vTextureCoord;
    varying vec3 vTransformedNormal;
    varying vec4 vPosition;

    void main(void) {
        gl_Position = uMVMatrix * vec4(aVertexPosition, 1.0);
        vTextureCoord = aTextureCoord;
        vTransformedNormal = uNMatrix * aVertexNormal;        
    }
</script>

<script id="per-fragment-lighting-fs2" type="x-shader/x-fragment">
    precision mediump float;

    varying vec2 vTextureCoord;
    varying vec3 vTransformedNormal;
    varying vec4 vPosition;

    uniform float uMaterialShininess;

    uniform vec3 uAmbientColor;

    uniform vec3 uPointLightingLocation;
    uniform vec3 uPointLightingSpecularColor;
    uniform vec3 uPointLightingDiffuseColor;

    uniform sampler2D uSampler;

    void main(void) {
        vec4 fragmentColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
        gl_FragColor = fragmentColor;
    }
</script>

但是如果我在着色器上添加​​一个变量,它会完全改变结果,尽管它没有在片段着色器上使用:

<script id="per-fragment-lighting-vs2" type="x-shader/x-vertex">
    attribute vec3 aVertexPosition;
    attribute vec3 aVertexNormal;
    attribute vec2 aTextureCoord;

    uniform mat4 uMVMatrix;
    uniform mat4 uMV2Matrix;
    uniform mat4 uPMatrix;
    uniform mat3 uNMatrix;

    varying vec2 vTextureCoord;
    varying vec3 vTransformedNormal;
    varying vec4 vPosition;

    void main(void) {
        gl_Position = uMVMatrix * vec4(aVertexPosition, 1.0);
        vTextureCoord = aTextureCoord;
        vTransformedNormal = uNMatrix * aVertexNormal;
        **vPosition = vec4(1,1,1,1);**
    }
</script>

你能帮我解释一下这里发生了什么吗?

谢谢!!

【问题讨论】:

  • 你在使用 glsl2agal 吗?
  • 是的,但我已经找到了解决方案。我必须更新答案,谢谢!

标签: flash shader vertex-shader stage3d


【解决方案1】:

glsl2agal 的问题是在顶点和像素着色器中映射变量的方式不同。

例如:

Vertex Shader                   
v0 vPosition                    
v1 vTextureCoord                
v2 vTransformedNormal

Fragment Shader
v1 vPosition
....

这显然会导致纹理输出不佳但顶点定位良好。

为了解决这个问题,我必须制作一个补丁来重新映射所有变量并搜索和替换生成的 AGAL 代码。

现在一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    相关资源
    最近更新 更多