将图像包裹在 glutWireSphere [重复]
Posted
技术标签:
【中文标题】将图像包裹在 glutWireSphere [重复]【英文标题】:Wrap an Image around glutWireSphere [duplicate] 【发布时间】:2015-12-08 00:57:29 【问题描述】:我正在尝试在我的 OpenGL/C++ 程序中的 glutWireSphere 周围包裹一个图像。我正在制作一个太阳系,并且我有纹理图像,我想将它们包裹在我已经绘制的球体周围。我搜索了 Google 以尝试找出如何做到这一点,但我发现了过时的教程或对我需要的内容更复杂的教程(至少我认为)。
我尝试使用 SOIL,但实施起来并不顺利。我想知道这是否是做我想做的事情的最佳途径,还是我应该尝试另一种方法?
只是在这里寻找一些方向,谢谢。
【问题讨论】:
你不能用 GLUT 的绘图函数(glutWireSphere
等)做很多事情——实际上它们只是为了测试 OpenGL 的工作原理。
【参考方案1】:
glutSolidSphere
的规范不要求为生成的顶点生成纹理坐标。因此,需要进行一些环跳才能在球体上获得纹理图像。
纹理球体的常用方法是使用 2D 纹理,其中行和列映射到经度和纬度。不过,这会在两极造成一些奇怪的失真,并且在该区域看起来不太好(这是由于数学定理,即至少需要 2 张地图才能覆盖一个球体而不会引入这种退化)。
另一种方法(非常适合glutSolidSphere
)是应用立方体贴图纹理并将球体顶点位置重新用作纹理坐标。这就是我的建议:使用 SOIL 加载立方体贴图纹理的六个面,并配置纹理坐标生成以使用顶点位置作为纹理坐标。在顶点着色器中最容易完成(只需将顶点位置作为变量传递给用于纹理查找的片段着色器),但也可以使用旧的固定函数管道来实现。
【讨论】:
以上是关于将图像包裹在 glutWireSphere [重复]的主要内容,如果未能解决你的问题,请参考以下文章