gpt4 book ai didi

opengl - GLSL Vertex Shader 编译无显示

转载 作者:行者123 更新时间:2023-12-02 19:55:50 29 4
gpt4 key购买 nike

我正在尝试实现 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com