我一直在研究一个3D渲染项目,作为一项技术练习,看看我是否可以复制许多3D框架已经完成的工作:从加载模型到绘制三角形到准备好绘制的缓冲区
以下是我设法制作的示例
正如您从截图中看到的那样,我在图表上绘制了纹理。这个Wikipedia link我发现了关于仿射与非仿射的解释。 其他一些类似于perspective correct texture mapping的链接更详细地介绍了它。
在绘制像素时,我仍然不明白如何纠正我的UV坐标。
我的引擎目前如何使用三角形: 将3D顶点数据转换为2D屏幕数据 调用绘制三角形在0和0之间传递深度1和纹理细节 在绘制三角形内,每条垂直线通过沿三角形的3个边缘进行插值来绘制
我已经对链接进行了更改,但我得到了零错误。如果我忽略它们,就不会画出任何东西。
问题
如何校正在每个像素处选择的UV坐标。目前在每个像素处,我知道0.0到1.0之间的深度,即表观UV。
非常感谢任何帮助。提前谢谢。
汤姆:)更新
解决方案,使用Andreas Brinck的答案。它工作正常。下面是它正在运行的截图。
答案 0 :(得分:1)
不是在三角形上插入u和v,而是插入u / z,v / z和1 / z(在顶点处计算)并检索透视正确坐标为(u / z)/(1 / z)和(v / z)/(1 / z)。