为什么我的着色器给我黑屏?

问题描述 投票:0回答:1

我想说的是我有一个关于地形生成的项目,我一直在尝试用不同的着色器计算法线。该项目在第一个着色器上工作得很好,但是当我添加第二个着色器时,我得到一个黑屏,但没有错误。 这是顶点、几何和片段着色器

顶点:

#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) ;
}

我本质上想做的是使用我的几何着色器计算我的地形的表面法线,但我只得到一个黑屏。几乎是这样的。

c++ opengl glsl glfw
1个回答
0
投票

我认为你应该添加这个:

#ifdef GL_ES
precision mediump float;
#endif

实际上你没有说任何关于错误和规格硬件的事情。

© www.soinside.com 2019 - 2024. All rights reserved.