2012-01-04 25 views
0

我一直在寻找这个体积线路着色器设置菲利普赖德奥特创建:http://prideout.net/blog/?p=61的OpenGL ES 2(iOS版)容积线实现

不幸的是在我开始深入调查他的实现并不支持OpenGL ES 2.工作关于如何做类似的事情,但使用OpenGL ES 2的设置,我想讨论如何实现这一点,当然,如果任何人已经有这个工作,也许他们可以分享一些想法。

看来,这将在OGL ES 2上工作所需要的是创建一组顶点,这些顶点形成了一个三角形条带,并且从线条信息创建了棱镜。

回答

1

我已经完成了像他在OpenGL ES 2.0中描述的光线追踪圆柱体冒名顶替者。这比桌面OpenGL稍微复杂一点,但它是可能的。为此,我为每个圆柱体(在圆柱体中心线的起始点)输入四个顶点,以及圆柱体从头到尾的方向矢量。在顶点着色器中,我移动了屏幕空间中的四个顶点以覆盖可容纳光线追踪圆柱体的区域。在片段着色器中,我绘制了该圆柱的光线跟踪表示。

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

Cylinder raytraced impostors

对OpenGL ES 2.0的这个有点难度是什么让的是,我们没有写gl_FragDepth为了处理重叠的能力两个实心圆柱体。我最终做了一个预渲染,将圆柱体的每个片段的深度渲染为离屏纹理,然后在光线跟踪阶段使用该深度纹理丢弃不可见的碎片。

这个过程的一个稍微更详细的写法可以找到here,我的应用程序使用此源代码可以从here下载。我警告你,深度和光线追踪数学并不适合我的应用程序中的圆柱体,而且我仍在努力解决这个问题。

+0

有趣的布拉德。所以你提到的重叠解决方案是否会产生两个气缸加入的倒角? – Claudia 2012-01-05 19:14:17

+0

@Claudia - 是的,虽然在我的情况下,重叠更常见于球体和圆柱体或球体和另一个球体之间。作为第一遍颜色写出的深度值是该片段中任何物体到摄像机的最近深度,因此在后面的光线追踪阶段绘制了正确的交点。您可以在屏幕截图中看到球形圆柱体交点:http://sunsetlakesoftware.com/image/caffeine-ipad?size=_original – 2012-01-05 19:20:59