我想用正确的透视图来映射纹理以进行3D渲染。我使用重心坐标来定位三角形面上的点。简单的仿射变换给了我标准的,奇怪的结果。这就是我为纠正自己的观点而采取的措施,但它似乎只是使失真更大:
三个三角形顶点v1 v2 v3
顶点坐标为v_.x v_.y v_.z
纹理坐标为v_.u v_.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/
注意:我的标签最初都是错的。现在已经修复了。
答案 0 :(得分:1)
好的,我自己设法解决这个问题。我在屏幕空间中除以z坐标。解决方案是用均匀的w坐标除以。
嗯,这需要一段时间来弄明白。