【问题标题】:Spinning globe in Opengl-esOpengl-es 中的旋转地球仪
【发布时间】:2010-09-22 06:24:50
【问题描述】:

我需要在 android 中使用 opengl 绘制一个旋转的地球。我认为我们需要绘制一个球体,然后在其上应用纹理贴图。如果我是正确的,我们不能使用 Opengl ES 中的实用程序库 glu 来绘制球体。我确实在目标 C 中找到了一些代码,但是我必须让它在 android 上运行。

http://www.iphone4gnew.com/procedural-spheres-in-opengl-es.html

还有其他方法可以做到这一点吗?我不知道如何解决这个问题,你能给我一些输入,让我朝着正确的方向寻找。

谢谢

【问题讨论】:

    标签: android opengl-es


    【解决方案1】:

    您实际上可以创建自己的球体渲染函数。

    一个镶嵌球体只不过是一堆 n 个锥形段,每个段近似为 m 个切片。

    这张图片(由 dglwiki.de 提供)说明了这一点:

    (德语文本翻译为'如果分辨率过低,球体退化为其他对称体)

    为了构造球体,您需要指定中心点、半径、堆栈数和每个堆栈的切片数。

    球体的第一个极点可以是距中心点半径为一定距离的任何点。从该点到中心点的矢量定义了球体的旋转轴(以及第二个极点的位置)

    接下来,您需要在球体上围绕旋转轴估算几个等距的纬度圆。圈数应该是堆栈数-1。这些圆中的每一个都应具有与您所需的切片数量一样多的顶点。

    计算完这些,你就有足够的几何信息来构建你的球面了。

    从使用第一个圆的顶点起始于其中一个极点的三角扇开始。 然后,为每对相邻的纬度圆构造三角形带。最后一步是从第二个极点到最后一个纬度圈构建另一个三角形扇形。

    使用这种方法,您可以生成任意平滑度的任意球体

    【讨论】:

    • 我也要试试这个!如果我让它运作良好,我会发布一些东西来帮助其他人。不过今晚不会尝试 ;-)
    【解决方案2】:

    除了 sum1 所说的,您提供的指向 obj-C 代码的链接大多只是 C,它可以很好地转换为 Java/android。提供的技术与 sum1 建议的技术非常相似,尽管作者只在顶部使用了一个扇形,然后用单个三角形条绘制球体的整个其余部分。此外,他的地球仪是“侧躺”的,风扇在“东极”,另一点在“西极”。

    但是,您可以按原样使用您提供的链接,也可以轻松地进行调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      • 2019-05-03
      • 2013-05-12
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多