2

我目前正在使用 Z-Buffer 算法实现我自己的渲染器。一旦我完成了必要的计算(阅读:我的 Z-Buffer 填充了正确的值),我使用 SDL 为必要的像素着色。我为此使用了 HWSurface。

我的问题是,我怎样才能尽可能快地渲染它?我的意思是绘图本身,我可以对我的结构和算法进行优化,我稍后会这样做,但我想确保绘图本身尽可能快。

因为我有自己的 ZBuffer 实现(以后还会有其他算法)我不能使用 OpenGL,所以有什么替代方案吗?

现在,我只是检查 z 缓冲区中的所有点,并一个一个地绘制所有必须绘制的像素(因为它是 z 缓冲,所以我必须这样做,对吗?)然后我调用绘制像素方法。关于 SDL,我在通过 z 缓冲区之前锁定我的表面,绘制所有像素然后解锁它,据我所知,这不能更快。

有什么建议么?

4

1 回答 1

1

软件实现非常慢——也就是说,WARP 在 i7 六核上以 8800GT 的十分之一的 FPS 渲染孤岛危机。您不会在软件实现的 Z 缓冲区中找到任何具有竞争力的性能。

Z 缓冲区并不是一种特别复杂的算法,您不太可能找到一种比另一种更有效的实现。Z 缓冲不是您在光栅化期间执行的操作,而是您在像素渲染期间执行的操作。如果新像素的深度比当前写入的值更远,则不要再渲染像素,例如,不要计算它的颜色等。不要绘制 z 缓冲区或类似的东西。它不像你可以为你的算法选择最有效的排序——它更像是一个矩阵乘法,它们几乎都是一样的。

于 2011-01-23T00:11:17.827 回答