具有重心坐标的三角形纹理映射

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

计算机图形学-纹理映射计算重心坐标UV插值双线性插值MipMap

通用三角形网格的简单纹理映射

纹理映射一个NGon?

使用 OpenGL 进行纹理映射后的奇怪结果

纹理在openGL中使用2D纹理映射3D对象