【发布时间】:2011-03-24 18:56:17
【问题描述】:
我正在编写一个当前运行良好的软件渲染器,但我正在尝试对纹理坐标进行透视校正,但这似乎不正确。我在渲染器中使用与 opengl 相同的矩阵数学。要栅格化三角形,我执行以下操作:
使用模型视图和投影矩阵转换顶点,并转换为剪辑坐标。
对于每个三角形中的每个像素,计算质心坐标以插入属性(颜色、纹理坐标、法线等)
为了纠正透视,我使用透视正确插值: (w为顶点深度坐标,c为顶点纹理坐标,b为顶点重心权重)
1/w = b0*(1/w0) + b1*(1/w1) + b2*(1/w2) c/w = b0*(c0/w0) + b1*(c1/w1) + b2*(c2/w2) c = (c/w)/(1/w)
这应该可以纠正透视,并且有点帮助,但仍然存在明显的透视问题。我在这里遗漏了什么,也许是一些舍入问题(我对所有数学都使用浮点数)?
在这张图片中可以看到纹理坐标沿对角线的明显误差,这是除以深度坐标的结果。
此外,这通常用于纹理坐标...是否也需要其他属性(例如法线等)?
【问题讨论】:
-
截图可能会有帮助。
-
在我的评分为 10 之前,我无法添加屏幕截图 :(