考虑一下情况,
案例1:我通过绘制所有多边形来给出opengl调用来绘制世界。因此,将根据存在的所有对象绘制所有多边形。 (考虑所有翻译轮换)。
情况2:我将仅允许绘制相机视场(FOV)中的多边形。因此显然会减少渲染的要求。但要求检查多边形是否在FOV中会增加每个多边形。
所以我的问题:哪种情况(方法)考虑对效果的影响会更好?
我的想法:由于在案例2中调用的次数将加倍(计算多边形是否在FOV +调用渲染)我认为第二种情况会很慢。如果我不对,请纠正我。
如果语言很重要,我已经标记了c ++
答案 0 :(得分:3)
在您描述的方式中(检查每个多边形是否在FOV内),它几乎总是更慢 - GPU可以更快地完成。但是这个想法可以通过在一些聪明的数据结构中组织多边形来改进,这可以快速切割出不在FOV中的大量多边形。这些例子包括octrees,R-trees,BSP-trees等等。
答案 1 :(得分:2)
诀窍是不检查每个多边形。您将检查一些较大的边界区域,通常是边界框。在多边形中进行此检查很快且O(1),并且几乎100%有效(只有少数边缘位置,您应该可以在不应该被剔除时)。
因此,剔除非常快,比渲染所有多边形要快得多。
答案 2 :(得分:0)
我同意Puppy发布的内容,但我想补充一些内容。首先使用边界框确定对象是否在FOV中。然后,一旦您知道对象是否在FOV中,您应该使用面法线检查该对象上的哪些多边形在FOV中。绘制没有人会看到的多边形是没有意义的。