屏幕/玻璃破碎效果

时间:2012-02-27 19:57:33

标签: c++ opengl opengl-3

我想在使用OpenGL(带着色器)的屏幕转换中做类似的事情。我一直在寻找一些教程或类似的东西,但没有任何影响。 我怎样才能达到这个效果? enter image description here

3 个答案:

答案 0 :(得分:3)

关于如何开始的一些想法..

  1. 如果您从3D场景开始,请使用rendertarget将其渲染为纹理。
  2. 绘制相同尺寸的画布随机多边形*
  3. 确定每个多边形的平移/旋转的随机偏移量
  4. 重绘图像,找到原始形状的原始多边形,如果是,则使用与新的随机变换多边形相同的变换变换像素
  5. 在每个多边形周围都有一个黑色像素边框 *唯一的事情是,如何获得初始多边形,你可以开始从随机位置随机方向和随机长度绘制一条线,然后从该线绘制另一条,直到你到达边缘,然后从顶点开始现有的行并重复......
  6. 谷歌随机多边形代码,或三角形矩形 Perlin噪音,Voronoi图(如上所述)等

答案 1 :(得分:1)

这种破碎效果最流行的算法之一涉及Voronoi Diagrams。研究该主题将为您提供可高度可控的算法的详细信息,并为您提供类似的效果。

然而,它产生凸多边形作为细胞。你的图像有一些凹陷的部分,但VD将是一个非常好的开始。例如,您可以通过合并Voronoi图中的一些结果多边形来实现类似的效果。

答案 2 :(得分:0)

这是一种避免摆弄多边形并允许更多变化的方法:

只需使用面具。我首先解释一件:只是绘制你的主要纹理四边形在随机方向下降,但使用第二个纹理来获得它的alpha。第二个纹理(蒙版)只是一个黑色图像,上面画着白色。请注意,它允许具有任何形状,而不仅仅是多边形。现在,只需使用不同的蒙版几次绘制主四边形就可以实现您想要的效果,但这需要很多纹理。

因此,要仅为所有碎片使用一个蒙版纹理,您可以使用着色器而不是直接使用蒙版的值作为alpha,而是使用值N(或N周围的范围)来表示仅对于棋子不透明N.你现在只需要在渲染每一块之前增加N.要创建蒙版,请使用黑色锯齿形绘制位图(使用图像编辑器),并使用调色板中的每个灰色填充创建的多边形。如果你需要很多部分,你可以使用多个频道。

BtW使用位图函数生成该掩码应该很容易:只需创建一个位图,绘制一些随机线,扫描它并在每个空像素上使用泛光填充,每次都增加颜色。至少这似乎比处理多边形切割更简单。

现在,我喜欢的是你可以免费获得不规则的边缘,并且因为你有第二个纹理,你也可以使用它来添加主要的效果,比如你的黑色边框,甚至是带有各种颜色的阴影边缘透明度水平。