如何在绘制带纹理的三维三角形时进行透视校正?

4
我一直在进行一个3D渲染项目,作为技术练习,看看我是否能复制许多3D框架已经完成的工作:从加载模型到将三角形绘制到缓冲区准备好进行绘制的所有步骤。
这是我成功制作的样本 Render of program output 如您从屏幕截图中所见,我在绘制表面纹理时遇到了难题。我找到了这个维基百科链接,它解释了仿射与非仿射。类似于这个关于透视正确的纹理映射的链接还详细介绍了它。
我仍然不明白如何在绘制像素时纠正我的UV坐标。 我的引擎目前如何使用三角形: 将3D顶点数据转换为2D屏幕数据 调用绘制三角形,传递深度在0和1之间以及纹理细节 在绘制三角形中,每条垂直线都通过沿着三角形的3条边进行插值来绘制。
我已经更改了链接,但是我遇到了除以零的错误。如果我忽略它们,就什么也画不出来。
问题:
如何在每个像素处选择正确的UV坐标。目前,在每个像素处,我知道0.0到1.0之间的深度,表面上的UV。
任何帮助都将不胜感激。提前感谢您。
汤姆:)
更新:
解决方案,使用Andreas Brinck的答案。它很好用。下面是它现在的截图。

working correct perspective texture mapping

1个回答

2

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


我会尝试那个修改,看看效果如何。我记得之前在另一个资源中尝试过类似的东西,但并没有成功。 - TomTom
我不知道是否需要重新解释,但它有效。我现在会发布一个工作截图。谢谢 :) - TomTom
很酷,很高兴能够帮助! - Andreas Brinck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接