如何在OpenGL中用三角形创建一个均匀的球体?

13

是否有一个公式可以生成一组三角形坐标,使它们的顶点位于球体上?

我可能正在寻找类似于gluSphere的功能。然而,我需要以特定颜色对不同的三角形进行着色,因此似乎不能使用gluSphere

另外:我理解gluSphere沿着等经度和纬度的线绘制边缘,这意味着在极点处,三角形比在赤道处小得多。现在,如果这样的公式可以生成三角形,使它们的大小差异最小化,那将是很棒的。


你正在寻找“地球形状生成”。谷歌可以用这两个词找到很多相关信息。 - Virne
3
无价之宝页面:http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html - Fattie
我赞同Joe Blow对Andreas Kahler博客文章的推荐。Kahler提供了C#代码和清晰的描述。 - Rethunk
请注意,该页面上有几个著名的错误,请小心! - Fattie
2个回答

22
为了计算法线和UV映射,幸运的是在球体上有一个惊人的技巧来计算法线。如果你思考一下,球体上的法线实际上就是从球体中心到该点的方向!此外,如果你仔细思考,那意味着法线字面上等于该点本身!也就是说,它们是同一个向量!只是别忘了对法线进行长度归一化。
你可以在这个问题上赢得酒吧赌注:"是否存在一种形状,使所有法线恰好等于顶点?"乍一看,你可能会认为这是不可能的,不存在这样偶然的形状。但是当然答案很简单:“半径为1的球体!” 呵呵!
关于UV,对于球体而言相对容易,假设你是以“矩形式”投影到2D平面上,那么u和v基本上就是任意点的经度/纬度,归一化为0,1。
希望能帮到你!
这是一篇经典的网页,精美地解释了如何构建一个正二十面体球体... http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html

5

从一个等二十面体开始。然后对三角形进行多次同构细分,将得到的顶点距离归一化到原点。


1
八面体也是第一个模型的不错选择。更多信息请参见此处:http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/sphere_cylinder/ - Virne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接