9.2 简单创建OpenGL-ES上下文

2018-12-25  本文已影响0人  hie

1.创建一个Simple View App,修改main.storyboard文件

把view 改为GLKView。

2.修改UIViewcontroller的父类

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内容,恢复至初始状态。

}

demo

上一篇下一篇

猜你喜欢

热点阅读