实现z缓冲区的好方法

时间:2014-02-13 18:17:38

标签: 3d rendering love2d zbuffer

目前我正在进行3D投影和渲染的第一次体验。 所以,我正在使用lövelua(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?

1 个答案:

答案 0 :(得分:1)

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

将顶点转换为相机空间(using view matrix calculations)后,您将获得每个顶点的解析Z值,然后它会到达最终为您提供每个像素的Z深度的polygon rasterization。 / p>

现在是每次在屏幕上写一个像素时Z测试的时间;如果像素位于当前像素的前面,则写入,否则什么都不做。

表现说明:   - 记住在使用Z-Buffer时不需要对多边形进行排序   - 当您说“顶点到摄像机位置的距离”时要小心。不要进行任何距离计算,矩阵变换将为您提供更高效的所需值。