Shader编译时不显示

Shader编译时不显示

我正在尝试实施phong着色无济于事。我正在一点一点地构建着色器(这本身可能是一个问题),但是这是我目前所在的位置。我希望这会将我的结果(犹他州茶壶)输出为我的黑色背景上的白色图像。当我从顶点着色器中删除第18行时,它可以正确执行此操作,但是当该行存在时,则没有输出,也没有错误。有任何想法吗?

片段着色器:

  1 #version 120
  2
  3 varying vec3 vertexNormal;
  4 varying vec3 cameraSpacePos;
  5
  6 vec3 calcSpecular(vec3 l, vec3 n, vec3 v, vec3 cL, vec3 cS, float p)
  7 {
  8     vec3 r =  2.0 * n * (n * l) - l;
  9     return cL * cS * pow(max(0.0, dot(r, v)), p);
 10 }
 11
 12 vec3 calcDiffuse(vec3 l, vec3 n, vec3 cL, vec3 cD)
 13 {
 14     return cL * cD * max(0.0, dot(n, l));
 15 }
 16
 17 void main(void)
 18 {
 19     vec3 lightDirection = normalize(vec3(-1.0, 0.0, -1.0));
 20     vec3 objectColor    = vec3(0.5, 0.0, 0.0);
 21     vec3 ambientColor   = vec3(0.1, 0.1, 0.1);
 22     vec3 lightColor     = vec3(0.3, 0.0, 0.3);
 23     vec3 specularColor  = vec3(1.0, 1.0, 1.0);
 24
 25     gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
 26 }


顶点着色器:

  1 #version 120
  2
  3 uniform mat4 modelView;
  4 uniform mat4 normalModelView;
  5 uniform mat4 projection;
  6
  7 attribute vec3 position;
  8 attribute vec3 normal;
  9
 10 varying vec3 vertexNormal;
 11 varying vec3 cameraSpacePos;
 12
 13 void main(void)
 14 {
 15     vec4 tmpCameraSpacePos = modelView * vec4(position, 1.0);
 16     gl_Position    = projection * tmpCameraSpacePos;
 17
 18     vertexNormal = (normalModelView * vec4(normal, 0.0)).xyz;
 19     cameraSpacePos  = (tmpCameraSpacePos).xyz;
 20
 21 }
 22


值得一提的是,当前未设置normal和normalModelView。我曾经尝试过将它们启用,以获得类似的结果。我的理解是应将它们设置为默认值。

最佳答案

由于您提到没有设置normalnormalModelView,所以我猜测它们也没有设置为默认值,并且在技术上是无效数据。在着色器中使用无效数据时,结果是不确定的,这是着色器难以调试的部分原因。在尝试在代码中引用它们之前,请确保为这些变量提供值。

关于opengl - GLSL Vertex Shader编译时不显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9857275/

10-11 18:26