美文网首页
9.2 简单创建OpenGL-ES上下文

9.2 简单创建OpenGL-ES上下文

作者: hie | 来源:发表于2018-12-25 14:40 被阅读0次

    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

    相关文章

      网友评论

          本文标题:9.2 简单创建OpenGL-ES上下文

          本文链接:https://www.haomeiwen.com/subject/xceikqtx.html