Opengl es 着色器和cook torrance无法输出纹理

Opengl es 着色器和cook torrance无法输出纹理,opengl-es,textures,fragment-shader,vertex-shader,opengl-es-lighting,Opengl Es,Textures,Fragment Shader,Vertex Shader,Opengl Es Lighting,我对opengl es着色器和cook torrance完全陌生, 以下着色器仅输出红色,未处理环境光和点光的纹理颜色。 立方体是用于测试的,没有应用着色器,右侧的火箭没有输出纹理,只有红色。有opengl es的人能帮忙吗? 没有纹理只有红色 应用cook torrance之前的原始纹理,并通过gl_FragColor=texture2D(纹理,VertexCoord.st).rgb*vertColor输出; 但是是什么让下面的CookTorance()失败了呢 片段着色器 #ifdef G

我对opengl es着色器和cook torrance完全陌生, 以下着色器仅输出红色,未处理环境光和点光的纹理颜色。 立方体是用于测试的,没有应用着色器,右侧的火箭没有输出纹理,只有红色。有opengl es的人能帮忙吗? 没有纹理只有红色 应用cook torrance之前的原始纹理,并通过gl_FragColor=texture2D(纹理,VertexCoord.st).rgb*vertColor输出; 但是是什么让下面的CookTorance()失败了呢

片段着色器

 #ifdef GL_ES
precision mediump float;
precision mediump int;
#endif

#define PI 3.14159265

//copper
uniform vec3 diffuseColor = vec3(0.75164,0.60648,0.22648);
uniform vec3 specularColor = vec3(0.256777,0.137622,0.086014);
uniform float F0 = 0.8;
uniform float roughness = 0.1;
uniform float k = 0.2;
//uniform vec3 lightColor = vec3(1, 1, 1);
uniform sampler2D texture;


varying vec4 varyvertColor;
varying vec3 ecNormal; //eye normal
varying vec3 lightDir;
varying vec4 varyambient;
varying vec4 varyspecular;
varying float varyshininess; //0.1
varying vec4 vertTexCoord; 

varying vec4 vposition;

vec3 CookTorrance(vec3 materialDiffuseColor,
    vec3 materialSpecularColor,
    vec3 normal,
    vec3 lightDir,
    vec3 viewDir,
    vec3 lightColor)
{
    float NdotL = max(0, dot(normal, lightDir));
    float Rs = 0.0;
    if (NdotL > 0) 
    {
        vec3 H = normalize(lightDir + viewDir);
        float NdotH = max(0, dot(normal, H));
        float NdotV = max(0, dot(normal, viewDir));
        float VdotH = max(0, dot(lightDir, H));

        // Fresnel reflectance
        float F = pow(1.0 - VdotH, 5.0);
        F *= (1.0 - F0);
        F += F0;

        // Microfacet distribution by Beckmann
        float m_squared = roughness * roughness;
        float r1 = 1.0 / (4.0 * m_squared * pow(NdotH, 4.0));
        float r2 = (NdotH * NdotH - 1.0) / (m_squared * NdotH * NdotH);
        float D = r1 * exp(r2);

        // Geometric shadowing
        float two_NdotH = 2.0 * NdotH;
        float g1 = (two_NdotH * NdotV) / VdotH;
        float g2 = (two_NdotH * NdotL) / VdotH;
        float G = min(1.0, min(g1, g2));

        Rs = (F * D * G) / (PI * NdotL * NdotV);
    }
    return materialDiffuseColor * lightColor * NdotL + lightColor * materialSpecularColor * NdotL * (k + Rs * (1.0 - k));
}

void main(){
vec3 direction = normalize(lightDir);
//vec3 normal = normalize(ecNormal);
vec3 normal = -normalize(ecNormal);



vec4 vertColor =  varyambient +
        vec4(CookTorrance(texture2D(texture,vertTexCoord.st).rgb*varyvertColor.xyz,
        varyspecular.xyz*specularColor,
        vposition.xyz,
        direction,
        normal,
        varyvertColor.rgb),1.0);



gl_FragColor = vertColor;


}

上述内容是否有错误? 请帮忙

顶点着色器

uniform mat4 modelviewMatrix;
uniform mat4 transformMatrix;
uniform mat3 normalMatrix;
uniform mat4 texMatrix;


attribute vec4 position;
attribute vec4 color;
attribute vec3 normal;

attribute vec4 ambient;
attribute vec4 specular;
attribute float shininess;

attribute vec2 texCoord;

varying vec4 vposition;
varying vec4 vertColor;
varying vec3 ecNormal;
varying vec3 lightDir;


varying vec4 varyambient;
varying vec4 varyspecular;
varying float varyshininess;
varying vec4 varyvertColor;

varying vec4 vertTexCoord;



void main() {
  // Vertex in clip coordinates
  gl_Position = transformMatrix * position;
  vposition = transformMatrix * position;

  // Vertex in eye coordinates
  vec3 ecVertex = vec3(modelviewMatrix * position);

  // Normal vector in eye coordinates
  ecNormal = normalize(normalMatrix * normal);


  varyambient=ambient;
  varyspecular=specular;
  varyshininess=shininess;

  varyvertColor=color;

  vertTexCoord = texMatrix * vec4(texCoord, 1.0, 1.0);

}


必须简化着色器代码才能找到问题所在。如果使用
gl_FragColor=texture2D(texture,vertexcoord.st).rgba,是否“看到”纹理?(使用工具反思您的应用程序。例如)GLSL编译和链接日志说明了什么?是的,第二个图形来自
gl\u FragColor=texture2D(texture,vertexcoord.st)。rgba
是OpenGL ES的RenderDoc吗?我需要用OpenGL ES写,抱歉没有错误,一切正常,CookTorrance()只写错了?