4

我一直在从事一个 3D 渲染项目作为技术练习,看看我是否可以复制许多 3D 框架已经做的事情:从加载模型到绘制三角形到准备绘制的缓冲区。

这是我设法制作的示例 程序输出渲染

正如您从屏幕截图中看到的那样,我在绘制表面纹理时遇到了障碍。我发现的这个维基百科链接解释了仿射与非仿射。与此类似的其他一些关于透视正确纹理映射的链接会更详细地介绍它。

我仍然不明白如何在绘制像素时校正我的 UV 坐标。

我的引擎目前如何使用三角形: 将 3D 顶点数据转换为 2D 屏幕数据调用绘制三角形,传递 0 和 1 之间的深度和绘制三角形内的纹理细节每条垂直线是通过沿三角形的 3 个边缘进行插值来绘制的

我已经在链接中进行了更改,但我得到了除以零的错误。如果我忽略它们,则不会绘制任何内容。

问题

如何校正在每个像素处选择的 UV 坐标。目前,在每个像素上,我都知道 0.0 到 1.0 之间的深度,即明显的 UV。

任何帮助将非常感激。先感谢您。

汤姆:)

更新:

解决方案,使用 Andreas Brinck 的答案。它工作正常。下面是它现在工作的屏幕截图。

工作正确的透视纹理映射

4

1 回答 1

2

不是在三角形上插值 u 和 v,而是插值 u/z、v/z 和 1/z(在顶点处计算)并检索透视正确坐标为 (u/z) / (1/z) 和 (v/ z) / (1/z)。

于 2012-08-17T12:52:27.927 回答