OpenGL投影剪辑

时间:2012-08-13 20:33:44

标签: opengl opengl-3

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

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游戏来说已经足够了吗?

2 个答案:

答案 0 :(得分:2)

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

精灵距离的条件测试将起作用。有点不需要,因为远剪裁平面几乎会做同样的事情。通常它足够好。有些情况下需要进行测试。剪切平面内角处的物体可能会在相机转动时到达远剪裁平面之外。原因是从相机到角落的距离比从相机到远剪裁平面的垂直距离长。如果您有2D游戏并且不允许更改摄像机视角,则这不是问题。

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

答案 1 :(得分:2)

GPU中裁剪的问题是它在pipeline中相对较晚发生,就在光栅化之前,所以很多计算都已经完成了。

在CPU上执行此操作可以防止这些计算发生,并且非常重要的是,减少实际绘制命令的数量(这也可能是瓶颈)。

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

总之:有用性取决于你的瓶颈在哪里(cpu,顶点着色器,传输速率......)。