2010-09-22 179 views
2

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

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

是否有任何其他方式做到这一点?我不知道如何解决这个问题,你能否给我一些建议让我看着正确的方向。

谢谢

回答

8

你实际上可以创建自己的球体渲染功能。

一个tesselated球体不再是一个由n个锥体片段组成的堆栈,每个锥体片段都用m个切片近似。

此图像(dglwiki.de的courtsey)说明这一点: gluSphere construction

(德语文本翻译为“如果分辨率为低,球体退化为其它对称的机构)

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

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

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

已经计算出这些,你有足够的几何信息来构建你的球面。

从一个三角形扇子开始,使用第一个圆的顶点在一个极点上。 然后,为每对相邻的纬度圈构造三角形条。最后一步是从第二个极点到最后一个纬度圈创建另一个三角形扇。

使用这种方法,就可以产生任意平滑

+0

谢谢,让我试试这个.. – Carl 2010-09-22 08:00:01

+0

我也会试试这个!如果我能很好地工作,我会发布一些信息来帮助别人。今晚不要尝试它;-) – MrJoeBlow 2010-11-14 20:40:33

2

的任意球除了什么SUM1说,该链接您提供的OBJ-C代码大多只是C,其转化很好地为Java /机器人。所提供的技术非常类似于sum1所建议的,尽管作者只在顶部使用一个扇形,然后用一个三角形条绘制整个球体的其余部分。此外,他的地球仪正在“侧卧”,风扇位于“东极”,另一个位于“西极”。

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