我想以正确的视角映射纹理以进行 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/
注意:我的标签一开始都是错误的。现在这个问题已经解决了。
最佳答案
好吧,这个问题我确实自己解决了。我除以屏幕空间中的 z 坐标。解决方案是除以齐次 w 坐标。
好吧,这花了一段时间才弄清楚。
关于rendering - 重心坐标纹理映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12360023/