前言
现在包含简书在内的很多博客在内,有很多的OpenGL ES的入门教程,其中不乏各种大神,但是我大致浏览了一下发现其中很多文章充斥着大量的专业术语并且解释比较少,对入门级的新手不太友好,本着也是对自己一种锻炼的原则,我尽量详尽接地气的写一个OpenGL ES的入门教程,毕竟自己懂是一种能力,让别人懂是另一种能力。
本文目标
搭建一个 OpenGL ES 的环境,比较简单,本系列大家也可以养肥再看,本来打算连带着画一个三角形,但是发现知识点略多,准备拆分出几篇文章来写,本文环境Xcode8 + OpenGL ES 2.0。
正文
1.创建项目
在Xcode的Game模板里已经包含了一个GLKViewController,这个ViewController就是专门用来写OpenGL ES的,本着物尽其用省事的原则,所以我们新建一个Game的模板,就是创建项目的时候选择Single View Application右边的Game,然后点下一步,直到项目创建完成。在这里我们可以直接运行一下,会看到两个正方体在不停的旋转。
2.清理项目
我们需要把无用的代码删掉,然后写自己的项目,删完之后的代码如下所示,你可以直接复制替换掉。
#import"GameViewController.h"
#import <OpenGLES/ES2/glext.h>
@interfaceGameViewController()
@property(strong,nonatomic)EAGLContext*context;
@end
@implementationGameViewController
- (void)viewDidLoad
{
[superviewDidLoad];
self.context= [[EAGLContextalloc]initWithAPI:kEAGLRenderingAPIOpenGLES2]; // 创建一个ES2的上下文
if(!self.context) {
NSLog(@"Failed to create ES context");
}
GLKView*view = (GLKView*)self.view;
view.context=self.context;
view.drawableDepthFormat=GLKViewDrawableDepthFormat24;//设置颜色缓冲区的格式
[EAGLContextsetCurrentContext:self.context];
}
- (void)didReceiveMemoryWarning
{
[superdidReceiveMemoryWarning];
}
#pragma mark - GLKView and GLKViewController delegate methods
- (void)update
{
}
- (void)glkView:(GLKView*)view drawInRect:(CGRect)rect
{
}
@end
3.项目开始
首先创建一个EAGLContext的上下文对象,这个对象通过一个API来初始化,可以选择2.0或者3.0,1.0因为时代久远我们不需要再继续考虑,而3.0是5s才开始支持的,所以暂时我们使用默认的2.0。
解释一下这两个代理方法
- (void)update
- (void)glkView:(GLKView*)view drawInRect:(CGRect)rect
如果我们在里面写上输出语句,会发现这两个方法一直在不停的调用,在这里苹果已经帮我们做好了分离,第一个方法通常用来更新数据,第二个方法用来渲染视图。
我们在drawInRect方法里清除一下背景。
glClearColor(.1f,.4f,.8f,1.f); // 设置清除使用的颜色
glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓冲区
颜色缓冲区就是帧缓冲区,我们需要渲染的场景最终每一个像素都要写入该缓冲区,然后由它在渲染到屏幕上显示,glClear还有GL_STENCIL_BUFFER_BIT,GL_DEPTH_BUFFER_BIT两个参数,为了避免知识点太多带来困惑,我们以后用到的时候再解释剩下的两个参数,运行之后,效果如下图。
结束
出现上图中的效果说明环境已经搭建成功且已经使用我们自己设置的颜色清除了颜色缓冲区,如果是项目里使用则自己新建一个ViewController继承GLKViewController即可,本文到此结束,接下来的教程会在以后的文章给出。