C# 在使用纹理绘制三维三角形时,如何校正透视?

C# 在使用纹理绘制三维三角形时,如何校正透视?,c#,3d,gdi,C#,3d,Gdi,作为一个技术练习,我一直在做一个3D渲染项目,看看我是否可以复制很多3D框架已经做过的事情:从加载模型到绘制三角形到准备绘制的缓冲区 这是我成功制作的一个样本 正如你从截图中看到的,我在绘制表面纹理时遇到了一个难题。我发现这解释了仿射和非仿射。 与此类似的其他一些链接将更详细地介绍它 我仍然不明白如何在绘制像素时校正UV坐标 我的引擎当前如何使用三角形: 将三维顶点数据转换为二维屏幕数据 调用0和1之间的绘制三角形传递深度和纹理细节 在“绘制三角形”中,通过沿三角形的3条边插值来绘制每条垂直线

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

这是我成功制作的一个样本

正如你从截图中看到的,我在绘制表面纹理时遇到了一个难题。我发现这解释了仿射和非仿射。 与此类似的其他一些链接将更详细地介绍它

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

我的引擎当前如何使用三角形: 将三维顶点数据转换为二维屏幕数据 调用0和1之间的绘制三角形传递深度和纹理细节 在“绘制三角形”中,通过沿三角形的3条边插值来绘制每条垂直线

我已经在链接中进行了更改,但是我得到了被零除的错误。如果我不理他们,什么也画不出来

问题

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

任何帮助都将不胜感激。先谢谢你

汤姆:)

更新:

解决方案,使用安德烈亚斯·布林克的答案。它很好用。下面是它现在工作的屏幕截图


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

我将尝试该修改,看看效果如何。我似乎记得在另一个资源后面尝试过类似的东西,但没有成功。我不知道我是否需要重新解释它,但这是有效的。我现在将发布一个工作截图。谢谢:)酷,很高兴能帮上忙!