OpenGL ES 开发,有什么入门教程推荐吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gamexg
V2EX    Android

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

  •  
  •   gamexg 2014-12-23 13:41:33 +08:00 15718 次点击
    这是一个创建于 4026 天前的主题,其中的信息可能已经有所发展或是发生改变。
    原来没接触过游戏开发,现在需要实现个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     Solana     2436 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 11:11 PVG 19:11 LAX 03:11 JFK 06:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86