在OpenGL中将纹理映射到球体时出现缝隙问题

Pri*_*tic 12 c++ opengl geometry

我正在尝试创建几何体以在OpenGL中表示地球.我有一个或多或少的球体(尽管接近地球的椭圆大地水准面).我绘制了地球表面的纹理(这可能是一个墨卡托投影或类似的东西).纹理的UV坐标对应于几何的纬度和经度.我有两个问题,我无法解决.我正在使用OpenSceneGraph,但我认为这是一个普通的OpenGL/3D编程问题.

  • 有一个非常明显的纹理接缝.我确定这是因为我不知道如何将UV坐标映射到发生接缝的XYZ.我只将UV coords映射到最后一个顶点然后环绕...你需要将两个不同的UV坐标映射到同一个XYZ顶点以消除接缝.是否有一个常用的技巧来解决这个问题,或者我只是做错了?

  • 两极发生疯狂的扭曲变形.我猜这是因为我在极点映射一个UV点(对于地球,我使用[0.5,1]作为北极,而[0.5,0]作为南极).你会做什么呢?我可以接受这个......但是在较低分辨率的网格中它非常明显.

我附上了一张图片来展示我在说什么.

我很害怕渲染地球

Nic*_*las 6

处理它的一般方法是使用立方体贴图,而不是2D纹理.

但是,如果您坚持使用2D纹理,则必须在网格拓扑中创建一个中断.获得该纵向线的原因是因为您有一个顶点的纹理坐标大小为0.9左右,其相邻顶点的纹理坐标为0.0.你真正想要的是0.9一个与1.0纹理坐标相邻.

这样做意味着将位置复制到球体的一行.因此,您在数据中使用两次相同的位置.一个附加到纹理坐标1.0并且邻近纹理坐标0.9.另一个的纹理坐标为0.0,并且顶点为0.1.

拓扑学上,您需要沿着球体纵向切片.