Opengl 穿透几何体着色器不工作

Opengl 穿透几何体着色器不工作,opengl,glsl,geometry-shader,Opengl,Glsl,Geometry Shader,我目前正在使用FragmentShader和VertexShader,效果非常好。我无法使几何体着色器正常工作。我对它完全陌生,下面是我尝试过的 我正在使用VBO、照明和纹理以及一些几何体,但在使用GeometryShader之前效果很好。我唯一更改的是变量名,因为我必须在几何体着色器中获取输入并给出输出。因此,我在变量名的末尾添加了1,这些变量名将从几何体着色器输出到片段着色器 此外,我还添加了以#开头的标题,这在以前是不存在的。我正在使用GL_三角形来绘制 顶点着色器 in vec4 pos

我目前正在使用FragmentShader和VertexShader,效果非常好。我无法使几何体着色器正常工作。我对它完全陌生,下面是我尝试过的

我正在使用VBO、照明和纹理以及一些几何体,但在使用GeometryShader之前效果很好。我唯一更改的是变量名,因为我必须在几何体着色器中获取输入并给出输出。因此,我在变量名的末尾添加了1,这些变量名将从几何体着色器输出到片段着色器

此外,我还添加了以#开头的标题,这在以前是不存在的。我正在使用GL_三角形来绘制

顶点着色器

in vec4 position; 
in vec4 color1;
in vec4 normal; 
in vec2 texCoord; 

uniform sampler2D Tex1; 

uniform int use_texture;

out vec4 pcolor;

out vec3 N;
out vec3 L;
out vec3 R;
out vec3 V;


uniform mat4 local2clip;
uniform mat4 local2eye;
uniform mat4 normal_matrix;
uniform mat4 world2eye; 

uniform vec4 light_ambient;
uniform vec4 light_diffuse;
uniform vec4 light_specular;
uniform vec4 light_pos;
#version 330 compatibility

uniform vec4 mat_ambient;
uniform vec4 mat_diffuse;
uniform vec4 mat_specular;
uniform float mat_shine; 

//varying vec3 v_normal;  // vertex normal 
out vec4 v_color;   // vertex color 
out vec4 pos_in_eye;  //vertex position in eye space 
out vec2 FtexCoord; 

void main(){

       gl_Position = local2clip * position;

       N =     normalize(vec3(normal_matrix * normal));    //v_normal
       vec4 Lpos =  world2eye * light_pos;                  //light pos. in eye
       vec4 Vpos =  local2eye * position;                   //pos_in_eye
       L = normalize(vec3(Lpos - Vpos));                    //light_vector

       R = normalize(reflect(-L, N)); 
       V = normalize(vec3(-Vpos));                          //eye vector

       vec3 halfv = normalize(L+V);
       FtexCoord = texCoord; 

       //pcolor = color1;
}
这是我的碎片

#version 330 compatibility

uniform int use_texture; 

in vec4 pcolor; 

in vec3 N1;
in vec3 L1;
in vec3 R1;
in vec3 V1;


uniform mat4 local2clip;
uniform mat4 local2eye;
uniform mat4 normal_matrix;
uniform mat4 world2eye; 

uniform vec4 light_ambient;
uniform vec4 light_diffuse;
uniform vec4 light_specular;
uniform vec4 light_pos;

uniform vec4 mat_ambient;
uniform vec4 mat_diffuse;
uniform vec4 mat_specular;
uniform float mat_shine;

uniform sampler2D Tex1; 
in vec2 FtexCoord1; 

void main() { 

       vec4 ambient = light_ambient * mat_ambient;
       float NdotL; 
       if (dot(N1,L1) <0.0) NdotL = 0.0; 
       else NdotL = dot(N1, L1); 

       vec4 diffuse = light_diffuse * mat_diffuse * NdotL;

       float RdotV; 
       RdotV = dot(R1, V1); 

       if (NdotL == 0.0) RdotV = 0.0; 
       if (RdotV <0.0) RdotV = 0.0; 

       vec4 specular = light_specular * mat_specular * pow(RdotV,mat_shine);   

       vec4 texcolor;


       if( use_texture == 1 ) {
          texcolor = texture2D(Tex1, FtexCoord1); 
          gl_FragColor = texcolor; 
       }
       else
          gl_FragColor = (diffuse + ambient + specular); 
 } 
#版本330兼容性
均匀的纹理;
在vec4-pcolor中;
vec3n1;
在vec3 L1中;
在vec3 R1中;
vec3v1;
均匀的mat4-local2clip;
均匀mat4局部2眼;
一致mat4正规矩阵;
统一mat4 world2eye;
均匀的vec4光照环境;
均匀vec4光漫射;
均匀vec4光镜;
均匀vec4灯位置;
均匀的vec4材料环境;
均匀vec4材料扩散;
均匀vec4材料镜面反射;
均匀的浮垫;
均匀取样器2d-Tex1;
在vec2中,FtexCoord1;
void main(){
vec4环境=光照环境*材料环境;
浮动NdotL;

if(dot(N1,L1)问题的核心是,在构建几何体着色器时,您没有检查编译错误。我知道这一点,因为我看到它有几个语法错误。特别是:

in vec3 N;
in vec3 L;
in vec3 R;
in vec3 V;

in vec4 v_color;    // vertex color 
in vec4 pos_in_eye;  //vertex position in eye space 
in vec2 FtexCoord; 
始终聚合到数组中。请记住:几何体着色器在上操作,它被定义为一个或多个顶点的集合。因此,每次GS调用都会获得一组逐顶点输入值,其中每个顶点对应一个


请注意如何循环基本体中的顶点数,并在[i]中使用
gl\u
获取基本体中每个顶点的输入值。这就是您需要访问所有几何体着色器输入的方式。您需要将每个输入写入其相应的输出变量,然后调用
EmitVertex
。所有这些都在该循环中。

问题的核心是,您在执行你构建了你的几何体着色器。我知道这一点,因为我看到它有几个语法错误。特别是:

in vec3 N;
in vec3 L;
in vec3 R;
in vec3 V;

in vec4 v_color;    // vertex color 
in vec4 pos_in_eye;  //vertex position in eye space 
in vec2 FtexCoord; 
始终聚合到数组中。请记住:几何体着色器在上操作,它被定义为一个或多个顶点的集合。因此,每次GS调用都会获得一组逐顶点输入值,其中每个顶点对应一个


请注意如何循环基本体中的顶点数,并在[i]中使用
gl\u
获取基本体中每个顶点的输入值。这就是您需要访问所有几何体着色器输入的方式。您需要将每个输入写入其相应的输出变量,然后调用
EmitVertex
。所有这些都在该循环中。

我做了一些更改,它可以工作,但我添加了图片,这与我所使用的有所不同巴瓦亚罗拉:顺便说一句,你应该读一读。谢谢你让我知道,我没有意识到这一点。我会跟进新的。如果你能在这方面帮助我,我会很高兴的。:)我做了一些修改,效果很好,但我添加了图片,我以前得到的和现在得到的有所不同。@BhavyaArora:顺便说一句,你应该读一下。谢谢你让我知道,我没有意识到这一点。我会跟进新的。如果你能在这方面帮助我,我会很高兴的。:)