我想用正确的透视图映射纹理以进行3D渲染。我使用重心坐标来定位三角形表面上的点。简单的仿射变换给了我标准的、看起来很奇怪的结果。这是我所做的,以纠正我的观点,但它似乎只会使失真更大:
三个三角形顶点v1 v2 v3
顶点坐标为v.x v.y v.z
纹理坐标为v.uv.v
与顶点对应的重心坐标为b1 b2 b3
我正在尝试获得正确的纹理坐标U和V
z=b1/v1.z+b2/v2.z+b3/v3.z
U=(b1*v1.U/v1.z+b2*v2.U/v2.z+b3*v3.U/v3.z)/z
V=(b1*v1.V/v1.z+b2*v2.V/v2.z+b3*v3.V/v3.z)/z
这应该有效,不是吗?为什么不起作用?
编辑:这个页面上的回复看起来很有用,但我不确定w坐标是什么。也许有人可以解释一下,这也可能解决我的问题。http://www.gamedev.net/topic/593669-perspective-correct-barycentric-coordinates/
注意:一开始我的标签都错了。现在已经解决了。
好吧,这个问题我自己解决了。我正在用屏幕空间中的z坐标进行分割。解决方法是除以齐次w坐标。
嗯,这花了一段时间才弄清楚。