opengl游戏开发书籍(学游戏开发需要懂openGL吗)(1)

游戏开发客户端图形核心技术就是openGL,在手机上的版本叫openGLES,这是一个它的轻量级版本。目前主流的游戏引擎cocos,unity都是在它的基础上进行了封装,并为开发者提供使用更简单的API或者可视化编辑器,因此,大多数情况下,我们并不需要透彻的去了解OpenGL是如何工作的。但了解是必要的,比如笔者就遇到了一个这样的问题。

问题描述:在维护一个 基于 cocos 2.1.3 (一个比较古老的版本)的旧项目的时候,运行这个项目的mac版本会出现如下的错误:

cocos2d: cocos2d: ERROR: Failed to compile vertex shader

问题的大概意思是:无法编译顶点着色器,而且通过openGL自带的日志函数也无法获得任何错误信息。从而导致程序无法运行。找了数天,都没有找到原因。这时候内心是

opengl游戏开发书籍(学游戏开发需要懂openGL吗)(2)

于是问题被搁置,直到过完春节,再来研究这个问题的时候,有了新的发现。编译shader之前需要调用

glCreateProgram();然而它的返回值始终为0。百度,google各种搜索,依然没有找到现成的解决方案,不过也得到了一些有用的信息,那就是 openGL的context没有初始化好。朝着这个方向,继续上前查询代码,终于在 EALView.mm文件中,发现了一个 prepareOpenGL 的函数,是用来初始化openGL的。然而在调试的时候,并没有发现这个函数被调用过。于是尝试修改 initWithFrame 如下:

if( context ){

[selfsetOpenGLContext:context];

}

else{

[self prepareOpenGL];

}

else是 新增的代码,重新编译运行程序。终于成功!

opengl游戏开发书籍(学游戏开发需要懂openGL吗)(3)

结论:

  1. 选择一个好引擎。

  2. 也要适当了解OpenGL。

,