2

例如,如果我们有正射投影:

left = -aspect, right = aspect, top = 1.0, bottom = -1.0, far = 1.0, near = -1.0

并将在 -2.0 处绘制三角形,它将被剪裁平面附近的剪裁切掉。它真的会节省一些宝贵的渲染时间吗?

剔除决定我们是否需要绘制某些东西,如果超出我们的视野则丢弃(由程序员在顶点着色器/主程序中编写)。剪裁 == 便宜的自动剔除?

也只是在廉价剔除的主题 - 将是

if(dist(cam.pos, sprite.pos) < MAX_RENDER_DIST)
draw_sprite(sprite);

只够简单的 2d 游戏吗?

4

2 回答 2

2

对于 x、y 和 z,默认 OpenGL 裁剪空间为 -1 到 +1。

精灵距离的条件测试将起作用。这有点不需要,因为远剪裁平面几乎可以做同样的事情。通常它已经足够好了。在某些情况下需要进行测试。剪切平面内拐角处的对象可能会随着相机转动而出现在远剪切平面之外。原因是相机到角点的距离大于相机到远裁剪平面的垂直距离。如果您有 2D 游戏并且不允许更改摄像机视角,这不是问题。

如果你有一个简单的 2D 游戏,你很有可能不需要担心图形优化。如果您在剪裁平面之外绘制精灵,您可以节省时间。但是你节省多少时间取决于。如果大量精灵在外面,您可以节省大量时间。但是,您可能应该考虑使用什么算法,而不是绘制无论如何都不会显示的东西。如果只有一小部分精灵在外面,那么节省的时间将可以忽略不计。

于 2012-08-13T21:18:17.997 回答
2

GPU 中的裁剪问题在于它在管道中发生得相对较晚,就在光栅化之前,因此很多计算可能已经白费了。

在 CPU 上执行可以避免这些计算的发生,而且非常重要的是,可以减少实际绘制命令的数量(这也可能是一个瓶颈)。

但是,您确实希望在 CPU 中快速执行此操作,通常您将使用八叉树或类似的树来表示数据,以便您可以一次丢弃整个子树。如果您必须分别检查每个多边形甚至对象,这可能会变得很昂贵。

总而言之:有用性取决于瓶颈所在的位置(cpu、顶点着色器、传输速率……)。

于 2012-08-13T21:21:49.897 回答