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

2014-12-23 13:41:33 +08:00
 gamexg
原来没接触过游戏开发,现在需要实现个opengl es 的简单功能,有什么推荐的入门教程吗?
8370 次点击
所在节点    Android
8 条回复
gdgoldlion
2014-12-23 14:14:17 +08:00
学习游戏开发和学习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
2014-12-23 14:23:34 +08:00
http://opengl.zilongshanren.com/opengl-tutorial/tut01/zh.html 这个是翻译过的OpenGL教程,看这个就好了
miniwoodman
2014-12-23 15:34:23 +08:00
如果能介绍一下这个 “简单功能” 是什么, 那大家也好根据情况来推荐。想必你的需求比较急,不然就会在网上慢慢搜索查资料。

如果这个功能足够简单那就用OpenGL ES 1.0来实现,那需要学的东西就少很多。
如果复杂的化就需要 ES 2.0了(主要还是指画面效果,包括光照、阴影、辉光、色彩处理等后期处理特效) , ES 2.0 相比 1.0 足够强大,但有更多事情需要自己来做。
wupher
2014-12-23 18:30:10 +08:00
@gdgoldlion 你的头像是…… John Carmack ?
gamexg
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
2014-12-25 14:31:42 +08:00
@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
2014-12-25 14:48:32 +08:00
我当时实现学这些的时候也是在网上东看看西看看,包括纸质书的一些内容, 也没找到一本通俗易懂又深刻权威的 一站式 3D CG编程秘籍。 其实权威的倒是不少,大家手里也都有, 但都需要安下心来慢慢看, 所以没什么好推荐的~~
gamexg
2014-12-28 09:27:42 +08:00
@miniwoodman 照着书本上面的例子改了一个出来,大体功能已经实现了。非常感谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/155989

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX