我想说的是我有一个关于地形生成的项目,我一直在尝试用不同的着色器计算法线。该项目在第一个着色器上工作得很好,但是当我添加第二个着色器时,我得到一个黑屏,但没有错误。 这是顶点、几何和片段着色器
顶点:
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 normal;
uniform mat4 model;
uniform mat4 view;
out vec3 aNorm;
void main()
{
gl_Position = view * model * vec4(aPos, 1.0);
mat3 normalMatrix = mat3(transpose(inverse(view * model)));
aNorm = normalize(vec3(vec4(normalMatrix * normal, 0.0)));
}
几何:
#version 450 core
layout(triangles) in ;
layout(line_strip, max_vertices = 2) out ;
vec3 getNormal() ;
uniform mat4 projection;
in vec3 aNorm[];
void main()
{
const float length=1;
for(int i=0; i<gl_in.length(); i++)
{
gl_Position = projection * gl_in[i].gl_Position;
EmitVertex();
vec3 normal = getNormal();
gl_Position = projection * (gl_in[i].gl_Position+vec4(aNorm[i],0.0)*0.5f);
EmitVertex();
EndPrimitive();
}
}
vec3 getNormal()
{
vec3 a = vec3(gl_in[0].gl_Position) - vec3(gl_in[1].gl_Position);
vec3 b = vec3(gl_in[2].gl_Position) - vec3(gl_in[1].gl_Position);
return normalize(cross(b, a));
}
片段:
#version 330 core
out vec4 FragColor ;
void main()
{
FragColor = vec4(0.2,0.8,0.2,1.0) ;
}
我认为你应该添加这个:
#ifdef GL_ES
precision mediump float;
#endif
实际上你没有说任何关于错误和规格硬件的事情。