【问题标题】:good way to implement a z-buffer实现 z 缓冲区的好方法
【发布时间】:2014-02-13 18:17:38
【问题描述】:

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

【问题讨论】:

  • 我认为你所说的爱是指love2d,如果不是可以删除该标签

标签: 3d rendering love2d zbuffer


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    相关资源
    最近更新 更多