首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenGL ES(二) 三角形

OpenGL ES(二) 三角形

作者头像
用户2215591
发布2018-06-29 14:54:52
5160
发布2018-06-29 14:54:52
举报
文章被收录于专栏:iOSer成长记录iOSer成长记录

相比于OpenGL绘图来说,OpenGL ES要简单很多,因为苹果公司给我们封装了工具类GLKBaseEffect,下面是一个简单的绘制三角形的例子:

-(void)setupGL{
    // 创建设备上下文,用OpenGL ES 2.0的API
    GLKView *view = (GLKView *)self.view;
    view.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
    // GLKView的深度缓存
    view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
    [EAGLContext setCurrentContext:view.context];
    
    // 创建GLKBaseEffect
    self.effect = [[GLKBaseEffect alloc]init];
    self.effect.useConstantColor = GL_TRUE; 
    self.effect.constantColor = GLKVector4Make(1.0f, 0.5f, 0.2f, 1.0); // 设置三角形颜色(注:如果开启光照,这里的颜色将会失效)
    
    // 顶点数据
    GLfloat vertices[] = {
        -0.5f, -0.5f, 0.0f,
         0.5f, -0.5f, 0.0f,
        -0.5f,  0.5f, 0.0f
    };

    // 生成顶点数据缓存标示符(参数1:指定生产缓存标示符的数量,参数2:指针指向标示符的内存保存位置)
    glGenBuffers(1, &vertexBufferID);
    // 绑定缓存,将指定标示符的缓存用到当前缓存,同一时刻只能绑定一个(参数1:指定绑定缓存的类型,参数2:缓存的标示符)
    glBindBuffer(GL_ARRAY_BUFFER, vertexBufferID);
    // 初始化一个缓存,并将数据复制到缓存中
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    
    // 启动顶点缓存渲染操作
    glEnableVertexAttribArray(GLKVertexAttribPosition);
    // 链接顶点保存的数据(参数1:当前每个顶点的位置信息,参数2:每个顶点有3个数据,参数3:每个数据是一个浮点值,参数4:小数点固定数据是否可以改变,参数5:每个顶点保存需要多少字节,参数6:访问数据的偏移值)
    glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 3*sizeof(GLfloat), NULL);
}
// 绘图函数
-(void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
    // 清除颜色(设置背景颜色)
    glClearColor(0xeb/255.f, 0xf5/255.f, 0xff/255.f, 1.0f);
    // 清除颜色帧缓存
    glClear(GL_COLOR_BUFFER_BIT); 
  
    // 准备绘图
    [self.effect prepareToDraw]; 
    // 执行绘图(参数1:告诉GPU怎么处理绑定在顶点缓存内的顶点数据,参数2:指定需要渲染的第一个顶点,参数3:需要渲染的顶点数量)
    glDrawArrays(GL_TRIANGLES, 0, 3);
}
// 删除不需要的顶点缓存和上下文
-(void)dealloc
{
    GLKView *view = (GLKView *)self.view;
    [EAGLContext setCurrentContext:view.context];
    if (0 != vertexBufferID){
        glDeleteBuffers (1,&vertexBufferID);
        vertexBufferID = 0;
    }
    [EAGLContext setCurrentContext:nil];
}

Demo下载地址:https://github.com/cdcyd/CCOpenGLES

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.08.09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档