我目前还没有解决纹理映射二十面体的问题,没有从极到极的接缝。这个原语的纹理映射似乎是一个常见问题,尚未完全解决。我做了很多研究,我已经尝试了很多不同的方法来生成紫外坐标,最近的(也是最小的)方法是这样的:
GLfloat u = 0.5f * ( 1.0f + atan2( z , x ) * ( 1 / M_PI ));
GLfloat v = acos( y ) * ( 1 / M_PI );
二十面体或地球圈是各种开源框架的一部分,例如jMonkeyEngine或Geist3D,但没有一个实现似乎正常工作。映射展开的矩形纹理应该不是不可能,或者我错了吗?每个代码段都是受欢迎的。
我上传了使用openFrameworks 0.61 for iPhone构建的Xcode项目here。里面还有两个PNG文件,每个文件都显示另一个接缝变化。
答案 0 :(得分:3)
你需要改变你的纹理图像,你拥有的纹理图像是一个球体的扭曲,其中杆被拉伸成一条线,你永远无法将它正确地映射到二十面体上,为了做到这一点你需要一个更像经度和纬度系统的分裂,这种失真来自于此。相反,你需要一个纹理图像,其中杆被分解成几个不同的点。你可以在一些世界地图上看到这一点,他们试图最小化将球体映射到平面上的失真。例如http://www.planetaryvisions.com/Project.php?pid=2236
找到有关纹理球体的不同方法的一些有用信息答案 1 :(得分:3)
二十面体的表面具有球体的拓扑结构。 2D纹理的表面具有平面的拓扑。球面与平面之间不存在微分同胚。也就是说,在2D纹理和二十面体表面之间没有拉伸和撕裂的情况下没有映射。
但是,立方体贴图和二十面体之间存在映射。
答案 2 :(得分:0)
我知道这个问题很旧,但是由于没有人提到以下解决方案,所以我想回答。
两种可能的解决方案:
x + 1
来调整纹理坐标。设置纹理使其水平缠绕,至少对于大多数多边形来说,您将摆脱接缝。