【问题标题】:Screen / glass break effect屏幕/玻璃破碎效果
【发布时间】:2012-02-27 19:57:33
【问题描述】:

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

【问题讨论】:

  • 您是从 3D 场景开始的吗?或者你是从你展示的图像开始的?
  • 我从 3d 场景开始,但我可以使用 FBO。

标签: c++ opengl opengl-3


【解决方案1】:

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

  1. 如果您确实从 3D 场景开始,请使用渲染目标将其渲染为纹理。
  2. 在相同大小的画布中随机绘制多边形形状*
  3. 确定每个多边形平移/旋转的随机偏移量
  4. 重新绘制图像,找出原始形状在哪个原始多边形中,如果是,则使用与新随机变换多边形相同的变换来变换像素
  5. 每个多边形周围都有黑色像素边框 *唯一的问题是,如何获得初始多边形,您可以从随机 pos 开始绘制一条具有随机方向和随机长度的线,然后从该线开始绘制另一条线,直到碰到边缘,然后从顶点开始现有行并重复...

google 随机多边形代码,或对矩形进行三角剖分 Perlin 噪声、Voronoi 图(如上所述)等

【讨论】:

    【解决方案2】:

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

    但是,它会生成凸多边形作为单元格。您的图像有一些凹块,但 VD 将是一个很好的开始。例如,您可以通过合并来自 Voronoi 图的一些生成的多边形来实现类似的效果。

    【讨论】:

    • 这种用法的 voroni digrams 很糟糕,因为它们只生成凸分离器。
    • @NilsPipenbrinck 确实如此,但如前所述,凸单元可以与一些随机邻居合并以产生凹形状。相应的 DT 也可以作为生成可以合并的三角分片的起点。然后再次合并作为后处理步骤是一种开销,但我已经看到这种效果在具有 VD 的动态模拟中通过物理约束实现,这些约束将某些部分保持在一起,因此是凹的(这具有与合并类似的效果)。你知道更直接地得到这个形状的算法吗?
    【解决方案3】:

    这是一种避免摆弄多边形并允许更多不同效果的方法:

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

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

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

    现在,我喜欢的是你可以免费拥有不规则的边缘,因为你有第二个纹理,你也可以用它来在主要的纹理上添加效果,比如你的黑色边框,甚至是带有各种颜色的玻璃边缘透明度级别。

    【讨论】:

      猜你喜欢
      • 2011-05-21
      • 2016-03-08
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多