5

我正在寻找一种替代技术,用于在 iPhone 上的 OpenGL ES 中渲染反射。通常我会通过使用模板缓冲区来标记可以看到反射的位置(反射表面),然后仅在这些像素中渲染反转图像。因此,当反射物体离开表面时,它的反射不再可见。但是,由于 iPhone 的实现不支持模板缓冲区,我无法确定如何隐藏落在表面之外的反射部分。

澄清一下,问题不在于渲染反射本身,而是在它们不可见时隐藏它们。

有任何想法吗?

4

2 回答 2

9

先渲染反射场景;glCopyTexImage2D使用;复制到纹理 清除帧缓冲区;正确绘制场景,将复制的纹理应用到反射表面。

于 2009-02-27T00:26:00.810 回答
2

我没有反射的答案,但这是我在没有模板缓冲区的情况下做阴影的方法,也许它会给你一个想法:

从光源的角度进行网格的基本正面/背面确定。然后我得到一个将前三角形连接到后三角形的所有边的列表。我将此边缘列表视为线“循环”。我沿着物体光线投射这个循环的顶点,直到它与地面相交。然后使用这些交点计算与地面相同的平面上的 2D 多边形。然后我使用镶嵌算法将多边形变成三角形。(只要您的光源或物体不经常移动,此方法就可以正常工作。)

一旦我有了三角形,我用轻微的偏移来渲染它们,这样深度缓冲区就会允许阴影通过。或者,您可以使用贴花算法,例如 Red Book 中的算法

于 2009-02-27T00:17:43.247 回答