0
点赞
收藏
分享

微信扫一扫

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_LINES或GL_LINE_STRIP时(2)

​lines_adjacency​

  • :GL_LINES_ADJACENCY或GL_LINE_STRIP_ADJACENCY(4)

​triangles​

  • :GL_TRIANGLES、GL_TRIANGLE_STRIP或GL_TRIANGLE_FAN(3)

​triangles_adjacency​

  • :GL_TRIANGLES_ADJACENCY或GL_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);随便写个颜色

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

举报

相关推荐

0 条评论