我正在为iPhone开发一个游戏,使用OpenGL ES作为绘图应用程序接口。我在一个单独的绘图元素中绘制了一个很大的世界。根据平截体,对象是可见的。
我想知道物体的另一部分发生了什么,它被绘制了吗?它会影响FPS吗?
发布于 2011-11-26 20:32:05
对于场景的任何顶点,必须运行顶点着色器,以便将其坐标从模型空间变换到剪辑空间。
在此之后,不包含在裁剪体积中的基本体(这意味着在裁剪空间中,它们要么在屏幕之外,要么太远或太近)被裁剪,因此它们不会被进一步处理,像素着色器也不会为它们运行。
对于OpenGL和OpenGL ES,这是相同的。您可以在OpenGL ES spec (2.13原语剪辑)或OpenGL规范(相同标题)中找到详细信息。
这意味着拥有大量几何体,其中大部分位于锥体之外,会稍微影响渲染时间,但比实际渲染所有几何体的要小得多。只需要完成逐顶点变换;不会对它们执行光栅化和逐像素操作(片段着色器、实际写入帧缓冲区)。
这还意味着,如果执行较多的逐顶点操作和较少的每像素操作,则为场景编写额外的可见性测试可能更重要。
发布于 2011-11-26 21:11:07
OpenGL处理您告诉绘制的所有基元。这就是为什么你必须决定自己画什么。这真的是一个很难的问题,因为起点是读this。
发布于 2011-11-26 20:58:49
几何管道将顶点坐标转换为窗口坐标;在这一点上,可以丢弃窗口外的多边形。但处理了太多不必要的几何图形,性能就会受到影响。
考虑使用某种视锥剔除:将场景分割为较小的部分或平铺,并在绘制之前评估平铺是否完全位于视图视锥之外,从而只绘制可能位于视锥内的平铺。
即使是一个简单的分区,差异也应该是显而易见的。
https://stackoverflow.com/questions/8278335
复制相似问题