@
gamexg 如果只是画一个地球,只要有纹理贴图和光照明暗效果,没有其他特殊效果的要求,就用ES 1.0 / ES 1.1 最容易实现。 ES 1.x 是会长期保留的API, 主要满足基础需求的应用场景。不用考虑兼容的问题。
在ES 2.0 上面哪怕想姚实现 1.0 上基本光照和贴图的效果,也需要做很多工作,2.0 不如 1.0 那么立竿见影, 其中会有很多挫折 / 坑。 如果确实想用2.0 实现, 又很急, 那还是找个现成的、有光照和贴图的示例 稍微改动一下 来的快。 ES 3.0 和 2.0 没差太多, 更多的是对2.0的一些扩展, 2.0的程序 几乎不用做什么改动就可以拿到3.0上用。 3.0不仅需要 Android 4.3还需要GPU厂商的驱动支持,新出的GPU基本都支持了, 但还是不如 2.0 普及。
-------------------------------------------------------------------------
如果用ES 1.0 实现,具体点:
结合这篇对Texture 纹理的介绍
http://www.jayway.com/2010/12/30/opengl-es-tutorial-for-android-part-vi-textures/可以把这个拿来改动一下
http://ruibm.com/2009/11/04/opengl-es-1-0-on-android/显示绘制环境设置代码部分都是固定的,如果不想深坑不用特别理解掌握
只要关注 gl.glDrawElements 和纹理相关的API调用就行。
还有矩阵注意一下,设置不好会白屏/黑屏。
只要学会显示一个带纹理的三角形就能显示一个带纹理的地球。
地球的 3D 数据可以从 3D美工软件中导出来,保存为.OBJ格式,与贴图文件一同放到 assets 资源文件夹中从程序读取,因为.OBJ格式最简单,是纯文本格式的,一行一个元素 Vertex / Normal / Face /,很容易读取。
另外对于 地球, 为了避免 贴图坐标冲突(地图边缘首尾相接处 同一个 Vertex 有 两个 UV Texture Coord), 可以在3D软件中将地球做好之后,沿着贴图接缝处 分离为两个独立物体(不移动,只分离)再导出来, 这样显示起来仍然像一个完成的地球,却没有贴图错乱的问题。这块如果不熟我给你弄。