4

我目前没有解决从极到极没有接缝的二十面体纹理映射的解决方案。这个图元的纹理映射似乎是一个普遍的问题,还没有完全解决。我做了很多研究,我尝试了很多不同的方法来生成 uv 坐标,最接近(和最小)的方法是这样的:

GLfloat u = 0.5f * ( 1.0f + atan2( z , x ) * ( 1 / M_PI ));  
GLfloat v = acos( y ) * ( 1 / M_PI );

二十面体或地理圈是各种开源框架的一部分,例如 jMonkeyEngine 或 Geist3D,但似乎没有一个实现可以正常工作。映射展开的矩形纹理应该不是不可能的,还是我错了?欢迎每个代码片段。

我在这里上传了 Xcode 项目,它是用 iPhone 的 openFrameworks 0.61 构建的。里面还有两个PNG文件,每个文件都显示了另一个接缝变化。

4

3 回答 3

3

您需要更改纹理图像,您拥有的纹理图像是球体的变形,其中极点被拉伸成一条线,您将永远无法将其正确映射到二十面体,为此您需要一个划分更像是产生这种失真的经纬度系统。相反,您需要一个纹理图像,其中极点被分解为几个不同的点。你可以在一些世界地图上看到这一点,他们试图将球体映射到平面上的失真最小化。例如http://www.planetaryvisions.com/Project.php?pid=2236

您可以在http://www.vterrain.org/Textures/spherical.html找到一些关于纹理球体的不同方法的有用信息

于 2011-01-15T12:54:44.107 回答
3

二十面体的表面具有球体的拓扑结构。2D 纹理的表面具有平面拓扑。球面和平面之间不存在微分同胚。也就是说,在 2D 纹理和二十面体表面之间没有没有拉伸和撕裂的映射。

但是,立方体贴图和二十面体之间存在映射。

于 2011-01-15T16:03:11.233 回答
1

我意识到这个问题很老,但由于没有人提到以下解决方案,我想我会回复。

两种可能的解决方案:

  1. 构建网格时,检测三角形是否位于接缝处。x + 1如果是这样,请使用接缝远端的每个顶点调整纹理坐标。将您的纹理设置为水平包裹,您将摆脱接缝,至少对于大多数多边形而言。
  2. 更好的是:根据表面法线计算片段着色器中的纹理坐标。这将完全摆脱接缝。
于 2018-10-16T14:24:49.203 回答