【问题标题】:How to draw "glowing" line in OpenGL ES如何在 OpenGL ES 中绘制“发光”线
【发布时间】:2011-10-09 19:43:54
【问题描述】:

您能否分享一些代码(任何语言),说明如何使用 OpenGL ES 1.0 在附加图像上绘制由许多点组成的纹理线(平滑或具有类似发光效果、蓝线、四个点)。

我正在尝试使用纹理 16x16 或 1x16 像素对 GL_LINE_STRIP 进行纹理处理,但没有任何成功。

【问题讨论】:

  • 纹理的大小不会神奇地增加线条的大小。您对纹理的工作原理有一个错误的认识。
  • 一种方法可能是使用像素着色器。正常画线,然后使用 3 次框模糊。
  • 好的,比我如何实现具有二维点数组和纹理(或使用 OpenGL ES 绘制此类线所需的任何东西)的这种效果
  • @Rekin OpenGL ES 1.0 没有着色器,但以防万一 ;) 你有链接到你提到的模糊着色器吗?
  • @michael:在 ES 1.0 中,您可以通过渲染到纹理然后创造性地使用 mip 贴图或从该纹理渲染到较小的纹理(如果您的实现使 mipmap 使用痛苦)来实现框模糊。跨度>

标签: opengl-es line


【解决方案1】:

在 ES 1.0 中,您可以创造性地使用渲染到纹理来实现您想要的效果,但在填充率方面可能会很昂贵。 Gamasutra 有an (old) article 了解如何在 Tron 2.0 游戏中实现发光 - 你需要特别注意 DirectX 7.0 cmets,因为它与 ES 1.0 一样,是一个固定的管道。在您的情况下,您可能只想显示高斯图像而不是将其与原始图像混合,因为您只对发光感兴趣。

我对文章的总结是:

  • 将所有线条渲染为正常的实线细线。将此纹理称为源纹理。
  • 通过获取您刚刚渲染的源纹理并将其绘制到另一个纹理(我将其称为水平模糊纹理)五次来对其应用线性水平模糊。在偏移量 x = 0 处绘制一份副本,不透明度为 1.0,再绘制两个副本——一份在 x = +1 处,一份在 x = -1 处——不透明度为 0.63,最后两份——一份在 x = +2 处,一份在 x = -2 处,不透明度为 0.17。使用添加剂混合。
  • 通过采用水平模糊纹理并执行基本相同的步骤,但使用 y 偏移而不是 x 偏移,对其应用线性垂直模糊。

这些不透明度数字来自this page 上的二维高斯核。与它们一起玩,以影响线外的跌落。

请注意此处涉及的额外成本:您表面上添加了十个全屏纹理绘制以及一些帧缓冲区交换。您可能可以通过使用多重纹理来减少绘制次数。着色器方法可能会一次完成水平和垂直步骤。

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    相关资源
    最近更新 更多