2011-11-26 50 views
4

我正在开发一款使用OpenGL ES作为绘图API的iPhone游戏。我正在绘制一个抽象元素的整个大世界。该对象根据平截头体可见。OpenGL ES Frustum的外部几何体是否也呈现?

我想知道对象的其他部分发生了什么,是否绘制?它会影响FPS吗?

+0

这个问题同时适用于OpenGL和OpenGL ES,所以我添加了OpenGL标记。 – Kos

回答

3

对于场景的任何顶点,顶点着色器都必须运行,以便它们的坐标从模型空间转换到剪辑空间。

之后,剪裁体中没有包含的原语(意思是在剪辑空间中,它们要么在屏幕之外,要么太靠近或太靠近),以便它们不被进一步处理并且像素着色器不会为它们运行。

这与OpenGL和OpenGL ES相同。您可以在OpenGL ES spec(2.13原始剪切)或OpenGL规范(相同标题)中找到详细信息。


这意味着有大量的几何形状,其中大部分是视锥之外,会影响你的渲染时间了一点,但比如果所有的几何真的呈现少得多。只需要进行每个顶点的转换;光栅化和每像素操作(片段着色器,实际写入帧缓冲区)将不会被执行。

这也意味着如果您执行许多每顶点操作和更少的每像素操作,那么为您的场景编写额外的可见性测试可能更重要。

0

几何管道将顶点坐标转换为窗口坐标;在那一点上,可以丢弃窗外多边形。但是处理太多不必要的几何,性能受到打击。

考虑使用某种类型的视锥剔除:将您的场景中较小的部分或瓷砖,和评估,绘制之前,如果瓷砖是完全视锥外,从而得出只有瓷砖这可能里面躺着视锥。

即使有一个简单的分区,差异也应该引人注目。

1

OpenGL处理​​您告诉绘制的所有基元。这就是为什么你必须确定自己画什么。这确实是一个难题,起点为this