OpenGL ES 2(iOS)体积线实现

时间:2012-01-04 20:03:46

标签: ios opengl-es 3d opengl-es-2.0

我一直在关注Philip Rideout创建的这个Volumetric Line着色器设置:http://prideout.net/blog/?p=61

不幸的是,他的实现对OpenGL ES 2不起作用。在我开始深入研究如何使用OpenGL ES 2设置做类似的事情之前,我想讨论如何实现这一点,当然,如果有人已经有了这个工作,也许他们可以分享一些想法。

似乎在OGL ES 2上工作所需要的是创建一组顶点,这些顶点形成一个三角形条带,其中根据线条信息创建了棱柱体。

1 个答案:

答案 0 :(得分:1)

我已经完成了他在OpenGL ES 2.0中所描述的光线跟踪柱面冒名顶替者。它比桌面OpenGL有点棘手,但有可能。

为此,我为每个气缸输入了四个顶点(在气缸中心线的起始点),以及从气缸开始到结束的方向矢量。在顶点着色器中,我移动了屏幕空间中的四个顶点以覆盖将保持光线跟踪圆柱体的区域。在片段着色器中,我绘制出该圆柱体的光线跟踪表示。

此示意图演示了一般过程:

Cylinder raytraced impostors

使OpenGL ES 2.0变得更加困难的原因是我们没有能力写入gl_FragDepth以处理两个实心柱面的重叠。我最后做了一个预先通过,我将圆柱体的每个片段的深度渲染到一个离屏纹理,然后在光线追踪阶段使用该深度纹理来丢弃不可见的碎片。

可以找到here这个过程的更详细的文章,我可以从here下载使用它的应用程序的源代码。我警告你,在这个应用程序中,深度和光线跟踪数学并不适合我的圆柱体,而且我还在努力修复它。