4

我正在使用 OpenGL ES 作为绘图 api 为 iPhone 开发游戏。我在一个绘图元素中绘制了整个大世界。根据平截头体,对象是可见的。

我想知道对象的另一部分发生了什么,它被绘制了吗?会影响FPS吗?

4

3 回答 3

3

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

之后,裁剪体积中不包含的图元(这意味着在裁剪空间中它们要么在屏幕之外,要么太远或太近)被裁剪,因此它们不会被进一步处理并且像素着色器不会不要为他们跑。

这对于 OpenGL 和 OpenGL ES 是一样的。您可以在OpenGL ES 规范(2.13 Primitive Clipping)或 OpenGL 规范(相同标题)中找到详细信息。


这意味着拥有大量几何体,其中大部分在截锥体之外,会稍微影响渲染时间,但比实际渲染所有几何体时要小得多。只需要进行逐顶点变换;不会为它们执行光栅化和每像素操作(片段着色器、实际写入帧缓冲区)。

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

于 2011-11-26T12:32:05.317 回答
1

OpenGL processes all primitives that you tell to draw. That's why you have to determine what to draw yourself. It is really hard problem, as the starting point read this.

于 2011-11-26T13:11:07.137 回答
0

几何管道将顶点坐标转换为窗口坐标;此时可以丢弃窗口外的多边形。但是处理了太多不必要的几何图形,从而影响了性能。

考虑使用某种截锥体剔除:将场景划分为更小的部分或切片,并在绘制之前评估切片是否完全位于视锥体之外,从而仅绘制可能位于截锥体内的切片。

即使使用简单的分区,差异也应该很明显。

于 2011-11-26T12:58:48.507 回答