Fer*_*yer 4 3d geometry textures vtk
我有一些球形经度/纬度坐标,用于我需要可视化的球体上的点.为此,我将点转换为笛卡尔坐标并构建了一个三角形网格,我可以使用VTK进行渲染.到目前为止工作.
现在我想为球体模型使用纹理.因此,我将球面坐标转换为纹理坐标,并将它们分配给每个点.这适用于球体的大多数表面三角形,结果看起来可以接受.
但是,对于纹理包裹的本初子午线的另一侧的三角形,三角形的纹理不正确:不是重复纹理和"在纹理边界上"的映射,整个纹理被挤压到单个三角形上.
这是一张它的样子:

zick-zack线显然是错误的,蓝线应该是可见的.整个纹理映射在三角形上,产生红色和白色条纹.这是有道理的,因为对于所讨论的三角形,纹理坐标跨越整个纹理空间.
为了说明这个问题,这不是特定于球体而是所有封闭的物体,我创建了下图:

在上部矩形中,我们看到一个三角形跨越纹理边界,带有计算纹理坐标A,B和C.由于纹理可以平铺,这就是我想要渲染三角形的方式.
下三角显示当前如何解释纹理坐标.边A,B和C的坐标是相同的,但这次,大部分纹理用于三角形,而不是在边界处平铺纹理.
我确信我犯了一个很常见的错误,但我还没有找到任何帮助我的东西.对我有任何暗示吗?
答案非常简单,您需要在边缘上映射纹理坐标.实现取决于您的数据集,但这是一个问题.
在计算机图形中,纹理坐标存储在面上而不是顶点上,您的问题显示原因.当您在球体周围绘制纹理时,让我们以10个步骤开始,以0.0开始,然后以0.1为增量继续.如果沿着本初子午线使用纹理坐标,则会得到纹理坐标为0.9和0.0的面.图形硬件执行它所说的内容,并在0.0和0.9之间插入纹理.
要解决您的问题,您需要将纹理从0.9映射到1.0.
如果可以,可以使用其他纹理坐标创建多边形或复制有问题的顶点.