1.创建一个Simple View App,修改main.storyboard文件
![](https://img.haomeiwen.com/i1974425/4a87d7fbb35150a5.png)
把view 改为GLKView。
2.修改UIViewcontroller的父类
![](https://img.haomeiwen.com/i1974425/54ec0fcd1101e29c.png)
3.创建EAGContext对象,并初始化 EAGLContext*context;
/*
kEAGLRenderingAPIOpenGLES1 = 1,
kEAGLRenderingAPIOpenGLES2 = 2,
kEAGLRenderingAPIOpenGLES3 = 3,
*/
//初始化context
context = [[EAGLContext alloc] initWithAPI:(kEAGLRenderingAPIOpenGLES3)];
if(!context){
NSLog(@"context初始化出错");
return;
}
//创建一个OpenGL ES上下文并将其分配给从storyboard加载的视图
//注意:这里需要把stroyBoard记得添加为GLKView
GLKView *view = (GLKView*)self.view;
view.context=context;
//配置视图创建的渲染缓冲区
/*
OpenGL ES 另一个缓存区,深度缓冲区。帮助我们确保可以更接近观察者的对象显示在远一些的对象前面。
(离观察者近一些的对象会挡住在它后面的对象)
默认:OpenGL把接近观察者的对象的所有像素存储到深度缓冲区,当开始绘制一个像素时,它(OpenGL)
首先检查深度缓冲区,看是否已经绘制了更接近观察者的什么东西,如果是则忽略它(要绘制的像素,
就是说,在绘制一个像素之前,看看前面有没有挡着它的东西,如果有那就不用绘制了)。否则,
把它增加到深度缓冲区和颜色缓冲区。
缺省值是GLKViewDrawableDepthFormatNone,意味着完全没有深度缓冲区。
但是如果你要使用这个属性(一般用于3D游戏),你应该选择GLKViewDrawableDepthFormat16
或GLKViewDrawableDepthFormat24。这里的差别是使用GLKViewDrawableDepthFormat16
将消耗更少的资源,但是当对象非常接近彼此时,你可能存在渲染问题()
*/
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
[EAGLContext setCurrentContext:context];
glEnable(GL_DEPTH_TEST);
glClearColor(1, 0, 0, 1); //设置surface的清除颜色,也就是渲染到屏幕上的背景色。
,实现代理方法
-(void)glkView:(GLKView*)view drawInRect:(CGRect)rect{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除surface内容,恢复至初始状态。
}
网友评论