Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Z缓冲区的高效实现_C++_Rendering_Graphics_Zbuffer - Fatal编程技术网

C++ Z缓冲区的高效实现

C++ Z缓冲区的高效实现,c++,rendering,graphics,zbuffer,C++,Rendering,Graphics,Zbuffer,我目前正在使用Z-Buffer算法实现自己的渲染器。一旦我完成了必要的计算(读取:我的Z缓冲区填充了正确的值),我就使用SDL对必要的像素进行着色。我用的是一个曲面 我的问题是,我怎样才能尽可能快地渲染它?我指的是图纸本身,我可以在我的结构、算法中进行优化,我稍后会这样做,但我想确保图纸本身尽可能快 因为我有我自己的ZBuffer实现(以后还会有其他算法),所以我不能使用OpenGL,所以还有其他选择吗 现在我在z缓冲区中遍历所有的点,然后一个接一个地绘制所有需要绘制的像素(因为是z缓冲,所以我

我目前正在使用Z-Buffer算法实现自己的渲染器。一旦我完成了必要的计算(读取:我的Z缓冲区填充了正确的值),我就使用SDL对必要的像素进行着色。我用的是一个曲面

我的问题是,我怎样才能尽可能快地渲染它?我指的是图纸本身,我可以在我的结构、算法中进行优化,我稍后会这样做,但我想确保图纸本身尽可能快

因为我有我自己的ZBuffer实现(以后还会有其他算法),所以我不能使用OpenGL,所以还有其他选择吗

现在我在z缓冲区中遍历所有的点,然后一个接一个地绘制所有需要绘制的像素(因为是z缓冲,所以我必须这样做,对吗?),我调用DrawPixel方法。关于SDL,我在通过z缓冲区之前锁定曲面,绘制所有像素,然后解锁,据我所知,这不会更快


有什么建议吗?

软件实现速度非常慢,也就是说,WARP在i7六核上渲染Crysis的速度是8800GT的十分之一。在软件实现的Z-buffer中,您不会发现任何有竞争力的性能


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

你能通过更新纹理来“绘制”它,然后使用opengl绘制一个带有纹理的四边形吗?我要检查一下,还不确定。光栅化是“像素渲染”,这是你通常做深度测试的地方。是的,你完全正确,我不得不承认这不会更快。