在绘制带纹理的3D三角形时如何校正透视?

时间:2012-08-17 12:46:49

标签: c# 3d gdi

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

以下是我设法制作的示例 Render of program output

正如您从截图中看到的那样,我在图表上绘制了纹理。这个Wikipedia link我发现了关于仿射与非仿射的解释。 其他一些类似于perspective correct texture mapping的链接更详细地介绍了它。

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

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

我已经对链接进行了更改,但我得到了零错误。如果我忽略它们,就不会画出任何东西。

问题

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

非常感谢任何帮助。提前谢谢。

汤姆:)

更新

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

working correct perspective texture mapping

1 个答案:

答案 0 :(得分:1)

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