美文网首页
OpenGL ES学习之路(2.2) 设置上下文

OpenGL ES学习之路(2.2) 设置上下文

作者: velue | 来源:发表于2019-03-04 22:58 被阅读0次

设置上下文

  • 第一步:当使用storyBoard的时候需要设置view继承GLKView
image.png
  • 第二步

#import <UIKit/UIKit.h>
#import <GLKit/GLKit.h>
@interface ViewController :GLKViewController

  • 第三步

#import "ViewController.h"
#import <OpenGLES/ES3/gl.h>
#import <OpenGLES/ES3/glext.h> // ES3代表着版本

@interface ViewController ()<GLKViewDelegate>{
    
    //EAGLContent是苹果在ios平台下实现的opengles渲染层,用于渲染结果在目标surface上的更新。
    EAGLContext *context;
}

@end

  • 第四步在viewDidLoad设置

- (void)viewDidLoad {
    [super viewDidLoad];

   
    /*
     
     //EAGLContent是苹果在ios平台下实现的opengles渲染层,用于渲染结果在目标surface上的更新
     kEAGLRenderingAPIOpenGLES1 ->OpenGL ES 1.0,固定管线
     kEAGLRenderingAPIOpenGLES2 ->OpenGL ES 2.0
     kEAGLRenderingAPIOpenGLES3 ->OpenGL ES 3.0
     
     */
     //第一步 新建OpenGL ES上下文
    context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
    
    if (!context) {
        NSLog(@"Failed to create ES context");
        return;
    }

    //第二步:创建一个OpenGL ES上下文并将其分配给从storyboard加载的视图
    // 注意:这里需要把storyBoard 记得添加微GLkView
    GLKView *view = (GLKView *)self.view;
    view.context = context;
    
    //第三次 配置视图创建的渲染缓冲区
    /*
     OpenGL ES 另一个缓存区,深度缓冲区。帮助我们确保可以更接近观察者的对象显示在远一些的对象前面。
     (离观察者近一些的对象会挡住在它后面的对象)
     默认:OpenGL把接近观察者的对象的所有像素存储到深度缓冲区,当开始绘制一个像素时,它(OpenGL)
     首先检查深度缓冲区,看是否已经绘制了更接近观察者的什么东西,如果是则忽略它(要绘制的像素,
     就是说,在绘制一个像素之前,看看前面有没有挡着它的东西,如果有那就不用绘制了)。否则,
     把它增加到深度缓冲区和颜色缓冲区。
     缺省值是GLKViewDrawableDepthFormatNone,意味着完全没有深度缓冲区。
     但是如果你要使用这个属性(一般用于3D游戏),你应该选择GLKViewDrawableDepthFormat16
     或GLKViewDrawableDepthFormat24。这里的差别是使用GLKViewDrawableDepthFormat16
     将消耗更少的资源,但是当对象非常接近彼此时,你可能存在渲染问题()
     */
    view.drawableDepthFormat = GLKViewDrawableDepthFormat16;
    //设置上下文
    [EAGLContext setCurrentContext:context];
    //开启深度测试
    glEnable(GL_DEPTH_TEST);
    //设置surface的清除颜色,也就是渲染到屏幕上的背景色。
    glClearColor(0.1, 0.2, 0.3, 1);
    
}

  • 第五步:实现代理
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
    
    //清除surface内容,恢复至初始状态
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
}


相关文章

网友评论

      本文标题:OpenGL ES学习之路(2.2) 设置上下文

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