2012-08-13 169 views
2

例如,如果我们有邻投影:OpenGL的投影裁剪

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

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

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

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

2

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

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

但是,您确实希望在CPU中快速执行此操作,通常您会使用octree或类似表示数据,因此您可以一次丢弃整个子树。如果您必须分别浏览每个多边形或对象,则可能会变得非常昂贵。

所以最后:有用性取决于你的瓶颈在哪里(CPU,顶点着色器,传输速率,...)。