如何在OpenGL ES中绘制“发光”线

时间:2011-10-09 19:43:55

标签: opengl-es line

enter image description here

请你分享一些关于如何使用OpenGL ES 1.0绘制纹理线条(光滑或具有类似发光效果,蓝线,四点)的代码(任何语言),包括许多点,如附加图像。

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

1 个答案:

答案 0 :(得分:5)

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

我对这篇文章的总结是:

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

这些不透明度数字来自this page上的2d高斯核。与它们一起玩,以影响线条外部的脱落。

请注意这里涉及的额外费用:您表面上添加了十个全屏纹理绘图加上一些帧缓冲交换。通过使用多重纹理,您可以减少绘图。着色器方法可能会在一次通过中执行水平和垂直步骤。