Glsl 如何在WebGL中渲染法线?

Glsl 如何在WebGL中渲染法线?,glsl,webgl,Glsl,Webgl,我正在尝试在WebGL中将法线渲染为颜色值。我有一些曲面的顶点法线,我想用法线值给它们上色。我目前正在顶点着色器中执行此操作: void main(void) { gl_PointSize = aPointSize; gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0); position_1 = gl_Position; vColor = aVert

我正在尝试在WebGL中将法线渲染为颜色值。我有一些曲面的顶点法线,我想用法线值给它们上色。我目前正在顶点着色器中执行此操作:

void main(void) {
        gl_PointSize = aPointSize;
            gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
        position_1 = gl_Position;
        vColor = aVertexColor;
        vIsDepth = aIsDepth;
        vIsNormal = aIsNormal;
        vHasTexture = aHasTexture;
        normals = uNMatrix*vec4(aNormal,1.0);
        if (aHasTexture > 0.5)
            vTextureCoord = aTextureCoord;

    }
片段着色器:

 if (vIsNormal > 0.5)
        {
            gl_FragColor = vec4(normals.xyz*0.5+0.5,1);

        }
    }

由于某种原因,现在我的输出是黄色的。r和g值为127,b值为0。有人知道出了什么问题吗?我的方法在基本理解上是错误的吗?

uNMatrix看起来如何?有点怀疑你在用4x4矩阵变换法线。法线矩阵通常为3x3。如果将未转换的法线从顶点着色器传递到片段着色器,会发生什么情况;要取消矩阵*Vec4异常,0.0;否则,如果在“取消矩阵”中有任何平移,它将弄乱法线。gl_FragColor=vec4normals.xyz*0.5+vec30.5,1.0?有向量和标量加法,这可能会导致问题。@抽象算法将标量添加到向量是完全有效的,并且在GLSL中定义良好。它会将标量值添加到每个向量分量中。我尝试了不转换法线,也尝试了取消矩阵vec4normal,0.0。两个都不起作用。我仍在拍摄灰度图像。通过执行transposeinverseuMVMatrix,可以获得Unmatrix。我还尝试了transposeinverseuPMatirxuMVMatrix。两者都不起作用。因为我只有顶点位置的法线,这种插值有效吗?