球体上的纹理错误

Fer*_*yer 4 3d geometry textures vtk

我有一些球形经度/纬度坐标,用于我需要可视化的球体上的点.为此,我将点转换为笛卡尔坐标并构建了一个三角形网格,我可以使用VTK进行渲染.到目前为止工作.

现在我想为球体模型使用纹理.因此,我将球面坐标转换为纹理坐标,并将它们分配给每个点.这适用于球体的大多数表面三角形,结果看起来可以接受.

但是,对于纹理包裹的本初子午线的另一侧的三角形,三角形的纹理不正确:不是重复纹理和"在纹理边界上"的映射,整个纹理被挤压到单个三角形上.

这是一张它的样子:

球纹理

zick-zack线显然是错误的,蓝线应该是可见的.整个纹理映射在三角形上,产生红色和白色条纹.这是有道理的,因为对于所讨论的三角形,纹理坐标跨越整个纹理空间.

为了说明这个问题,这不是特定于球体而是所有封闭的物体,我创建了下图:

纹理缝

在上部矩形中,我们看到一个三角形跨越纹理边界,带有计算纹理坐标A,B和C.由于纹理可以平铺,这就是我想要渲染三角形的方式.

下三角显示当前如何解释纹理坐标.边A,B和C的坐标是相同的,但这次,大部分纹理用于三角形,而不是在边界处平铺纹理.

我确信我犯了一个很常见的错误,但我还没有找到任何帮助我的东西.对我有任何暗示吗?

rio*_*oki 5

答案非常简单,您需要在边缘上映射纹理坐标.实现取决于您的数据集,但这是一个问题.

在计算机图形中,纹理坐标存储在面上而不是顶点上,您的问题显示原因.当您在球体周围绘制纹理时,让我们以10个步骤开始,以0.0开始,然后以0.1为增量继续.如果沿着本初子午线使用纹理坐标,则会得到纹理坐标为0.9和0.0的面.图形硬件执行它所说的内容,并在0.0和0.9之间插入纹理.

要解决您的问题,您需要将纹理从0.9映射到1.0.

如果可以,可以使用其他纹理坐标创建多边形或复制有问题的顶点.