实现 z 缓冲区的好方法



目前,我正在第一次体验3D投影和渲染。所以,我正在使用löve lua(ik,不是3D的最佳平台),我可以完美地渲染所有多边形(只有三角形)。因为按到相机的距离对多边形表进行排序是一项任务,这需要最多的时间,所以我正在为此实现一个 z 缓冲区。但我不太确定该怎么做。我知道原理,但是如何找出三角形中的点到相机位置的距离?我目前的解决方案听起来像这样:

translate edge points of the triangle to 2D points ->
create polygon of those ->
for every pixel in the polygon: ->
translate 2D point back to 3D vertex (somehow) ->
calculate distance of vertex to camera position ->
if distance is bigger than zbuffer entry, overwrite zbuffer entry and 
set pixel to polygon color

这听起来效率很低。我怎样才能加快速度?这里有人有更好的方法来实现 zbuffering 吗?

如果您要实现软件 Z-Buffer,则无需对多边形进行排序,只有那些具有 alpha 混合且不能包含在 Z-Buffer 技术中的多边形。

将顶点转换为相机空间(使用视图矩阵计算)后,您将获得每个顶点的 detph Z 值,然后是多边形光栅化,最终为您提供每个像素的 Z 深度。

现在是每次在屏幕中写入像素时进行 Z 测试的时间;如果像素在当前像素的前面,则写入,否则不执行任何操作。

性能说明: - 请记住,使用 Z-Buffer 时不需要对多边形进行排序 -当您说"顶点到相机位置的距离"时要小心。不要进行任何距离计算,矩阵变换将更有效地为您提供所需的值。

相关内容

  • 没有找到相关文章

最新更新