0

目前我正在第一次体验 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?

4

1 回答 1

1

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

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

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

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

于 2014-02-13T21:21:20.383 回答