OpenGl体验几何着色器

首先需要有带法线的模型  learnOpenGL里面的

shader("vert","frag","geomery"); shader跟顶点着色器和片段着色器写法差不多

然后进入顶点着色器

out VS_OUT

{

vec3 normal;

}vs_out;

aNormal是读进来的layout

需要一个矩阵m来纠正法线mat3(transpose(inverse(view*model)));

vs_out.normal=projection*vec4(m*aNormal,0);

这个就是纠正的法线了

然后进入几何着色器

layout(triangles) in;

这个输入布局修饰符可以从顶点着色器接收下列任何一个图元值:

  • points:绘制GL_POINTS图元时(1)。
  • lines:绘制GL_LINESGL_LINE_STRIP时(2)
  • lines_adjacencyGL_LINES_ADJACENCYGL_LINE_STRIP_ADJACENCY(4)
  • trianglesGL_TRIANGLESGL_TRIANGLE_STRIPGL_TRIANGLE_FAN(3)
  • triangles_adjacencyGL_TRIANGLES_ADJACENCYGL_TRIANGLE_STRIP_ADJACENCY

layout(line_strip,max_vertices=6) out;

输出布局修饰符也可以接受几个图元值:

  • points
  • line_strip
  • triangle_strip
同时希望我们设置一个它最大能够输出的顶点数量

in VS_OUT

{

vec3 normal;

}gs_in[];//数组

对应vertex

void G(int index)

{

//line_strip是绘制的图形

gl_Position=gl_in[index].gl_Position;//这是内置的gl_in

EmitVertex();这个就代表要绘制这个顶点

gl_Position=gl_in[index].gl_Position+vec4(gs_in[index].normal,0.0)*0.02;//*0.02不然会很长

EmitVertex();

EndPrimitive();//结束

}

void main()

{

G(0);G(1);G(2);

}

片段着色器 fragColor=vec4(1,0,0,1);随便写个颜色

就实现了一个把模型法向量显示出来的功能了。

猜你喜欢

转载自blog.csdn.net/qq_35158695/article/details/81029310