具有重心坐标的三角形纹理映射
Posted
技术标签:
【中文标题】具有重心坐标的三角形纹理映射【英文标题】:Triangle texture mapping with barycentric coordinates 【发布时间】:2014-06-01 14:13:18 【问题描述】:我想在我的光线追踪器中映射纹理三角形以进行 3D 渲染。 我正在使用重心坐标来定位三角形上的点。 但结果不正确。 这就是我所做的:
3 个三角形顶点:a b c
1 个交点(光线追踪):p
顶点坐标为a.x a.y a.z / b.x b.y b.z / c.x c.y c.z
纹理坐标为a.tx a.ty / b.tx b.ty / c.tx c.ty
首先,我得到交点和三角形顶点之一之间的距离:
d1 = get_distance(p, a);
d2 = get_distance(p, b);
d3 = get_distance(p, c);
其次,我计算每个顶点的重心比:
r1 = d1 / (d1 + d2 + d3);
r2 = d2 / (d1 + d2 + d3);
r3 = d3 / (d1 + d2 + d3);
最后,我确定图像上点的坐标:
x_img = (r1 * a.tx) + (r2 * b.tx) + (r3 * c.tx);
y_img = (r1 * a.ty) + (r2 * b.ty) + (r3 * c.ty);
但它不起作用。 你能解释一下为什么吗?
Kik-Ass Head 的渲染:
![kickass]:http://imgur.com/3LAjrWm
【问题讨论】:
你能定义你所说的“不正确”吗? 当我进行渲染时,颜色不在正确的位置 您有示例输出图像吗? @ArneBergeneFossaa 是的,我只需要 3 分钟就可以进行正确的渲染:s 【参考方案1】:您的重心计算似乎是错误的 - 从我准备您的代码的方式来看,组件离顶点越远,影响越大。
我猜应该是表格上的东西
r1 = (1/d1) / ( (1/d1) + (1/d2) + (1/d3) )
尽管除数为零或接近于零时会有一些问题。查看http://en.wikipedia.org/wiki/Barycentric_coordinate_system#Converting_to_barycentric_coordinates 以获得更好的计算方法。
【讨论】:
我在帖子中发布了图片链接,感谢您的帮助! 我的三角形在 3D 空间中,但公式是针对 2D 空间的,不是吗? 这些是您想要重心坐标的三角形的二维平面中的坐标。以上是关于具有重心坐标的三角形纹理映射的主要内容,如果未能解决你的问题,请参考以下文章
计算机图形学-纹理映射计算重心坐标UV插值双线性插值MipMap