我目前正在使用Z-Buffer算法实现自己的渲染器。完成必要的计算后(阅读:我的Z缓冲区已填充正确的值),我将使用SDL为必要的像素着色。我为此使用HWSurface。
我的问题是,我怎样才能尽快渲染呢?我的意思是图形本身,我可以在结构,算法中进行优化,稍后再做,但是我想确保图形本身尽可能快。
因为我有自己的ZBuffer实现(以后还会有其他算法),所以我不能使用OpenGL,那么还有其他选择吗?
现在,我将遍历z缓冲区中的所有点,并一一绘制所有必须绘制的像素(由于是z缓冲,所以我必须这样做,对吗?),我称之为DrawPixel方法。关于SDL,我在通过z缓冲区之前先锁定了表面,绘制了所有像素并随后对其进行了解锁,据我所知,这不能更快。
有什么建议么?
最佳答案
软件实现的速度非常慢-也就是说,WARP在i7六核上渲染《孤岛危机》的速度是8800GT的十分之一。在软件实现的Z缓冲区中,您将找不到任何竞争性能。
Z缓冲区并不是一种特别复杂的算法,而且您不太可能会发现一个实现比另一个实现更有效。 Z缓冲不是在栅格化期间执行的操作,而是像素渲染期间进行的操作。如果新像素的深度比当前写入的值更远,请不要进一步渲染像素,例如,不要计算其颜色等。您不要绘制z缓冲区或类似的东西。这不像是您可以为算法选择最有效的排序的一种排序方式,它更像是一个矩阵乘法,它们几乎都是一样的。