几何着色器(三)爆破和腐蚀效果

几何着色器的功能是很强大的,我们可以借用几何着色器的丢弃图元的特性实现腐蚀效果。我们也可以通过改变图元从而实现物体的爆破效果。因为几何着色器是GPU跑的,所以很大的提升了运行效率,从而实现实时的动画效果也是毫不费力的,下面的例子是采用了150万个点渲染的一个地形;

先看效果图动态图可能有些卡

腐蚀效果:


爆破效果:


         如果你之前已经看过我写的实现表面法线可视化,那么实现这个效果是非常简单的。

        说一下思路,爆破效果的话就是,将输出的图元改成三角面片,然后在几何着色器中实现每个顶点的更改(朝着法线的方           向)。

         输出图元:

    layout(triangle_strip, max_vertices = 3) out;
        

 步骤:

         1. 传入时间参数;

    uniform float time;

        

          2.获得法线

          法线可以从程序中直接读取也可以在几何着色器中计算

         

    vec3 getNormal(vec4 pos0, vec4 pos1, vec4 pos2)
    {
      vec3 a = vec3(pos0) - vec3(pos1);
      vec3 b = vec3(pos2) - vec3(pos1);
      return normalize(cross(a, b));
    }
    
 vec3 normal = getNormal(gl_in[0].gl_Position,gl_in[1].gl_Position,gl_in[2].gl_Position);

          3.更新三角面片顶点

   int i = 0;
 for( i =0; i< gl_in.length(); i++){
         float d = dist(time);// dist函数实现计算根据时间计算偏移量,自己定义即可
         gl_Position =  gl_in[i].gl_Position+vec4(normal,1)*d;
 
 
       EmitVertex();
   }
    }
       EndPrimitive();

        

        


猜你喜欢

转载自blog.csdn.net/qq_31804159/article/details/80374343