V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gamexg
V2EX  ›  Android

OpenGL ES 开发,有什么入门教程推荐吗?

  •  
  •   gamexg · 2014-12-23 13:41:33 +08:00 · 12884 次点击
    这是一个创建于 3658 天前的主题,其中的信息可能已经有所发展或是发生改变。
    原来没接触过游戏开发,现在需要实现个opengl es 的简单功能,有什么推荐的入门教程吗?
    8 条回复    2014-12-28 09:27:42 +08:00
    gdgoldlion
        1
    gdgoldlion  
       2014-12-23 14:14:17 +08:00   ❤️ 1
    学习游戏开发和学习OpenGL ES是不同的两个概念。

    楼主说的OpenGL ES,那么应该是想搞移动游戏开发。开发移动游戏只需要用现成的引擎就行,这方面2D的可以用Cocos2d-x,3d的可以用Unity3D,没有必要去学OpenGL ES。

    学习OpenGL ES也没有什么好的入门教程。网络上的基本上都很水,没办法谁让OpenGL ES是阉割版呢。倒是OpenGL的教程非常丰富。

    如果真有必要学习OpenGL的话,需要同步的了解四块内容

    1.若干游戏项目开发经验
    2.OpenGL学习主要是学习渲染管线和API
    3.熟练运用C/C++
    4.计算机图形学

    这四部分内容是相辅相成的。
    anyexxx
        2
    anyexxx  
       2014-12-23 14:23:34 +08:00   ❤️ 1
    http://opengl.zilongshanren.com/opengl-tutorial/tut01/zh.html 这个是翻译过的OpenGL教程,看这个就好了
    miniwoodman
        3
    miniwoodman  
       2014-12-23 15:34:23 +08:00   ❤️ 1
    如果能介绍一下这个 “简单功能” 是什么, 那大家也好根据情况来推荐。想必你的需求比较急,不然就会在网上慢慢搜索查资料。

    如果这个功能足够简单那就用OpenGL ES 1.0来实现,那需要学的东西就少很多。
    如果复杂的化就需要 ES 2.0了(主要还是指画面效果,包括光照、阴影、辉光、色彩处理等后期处理特效) , ES 2.0 相比 1.0 足够强大,但有更多事情需要自己来做。
    wupher
        4
    wupher  
       2014-12-23 18:30:10 +08:00
    @gdgoldlion 你的头像是…… John Carmack ?
    gamexg
        5
    gamexg  
    OP
       2014-12-25 09:35:41 +08:00
    @anyexxx Android Opengl es 3 需要Android 4.3 以上版本,而且 google 说 :“A device running Android 4.3 or higher may not support the OpenGL ES 3.0 API.”
    @miniwoodman 就是画个地球,实在找不到什么好资料了,目前真正看《android 3d游戏开发技术宝典》越来越觉得 opengl es2 反人类,设置一个参数需要好多步,先获得参数索引,然后启用参数,才能设置参数值。而且各种不同的参数类型还用不同名的方法,简直坑死。
    miniwoodman
        6
    miniwoodman  
       2014-12-25 14:31:42 +08:00   ❤️ 1
    @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软件中将地球做好之后,沿着贴图接缝处 分离为两个独立物体(不移动,只分离)再导出来, 这样显示起来仍然像一个完成的地球,却没有贴图错乱的问题。这块如果不熟我给你弄。
    miniwoodman
        7
    miniwoodman  
       2014-12-25 14:48:32 +08:00   ❤️ 1
    我当时实现学这些的时候也是在网上东看看西看看,包括纸质书的一些内容, 也没找到一本通俗易懂又深刻权威的 一站式 3D CG编程秘籍。 其实权威的倒是不少,大家手里也都有, 但都需要安下心来慢慢看, 所以没什么好推荐的~~
    gamexg
        8
    gamexg  
    OP
       2014-12-28 09:27:42 +08:00
    @miniwoodman 照着书本上面的例子改了一个出来,大体功能已经实现了。非常感谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2750 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 12:28 · PVG 20:28 · LAX 04:28 · JFK 07:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.