OpenGL ES(二) 三角形

相比于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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4818
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2537
来自专栏落花落雨不落叶

canvas画简单电路图

59911
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2625
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3095
来自专栏飞扬的花生

jsencrypt参数前端加密c#解密

      写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度...

3859
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2697
来自专栏芋道源码1024

熔断器 Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker

本文主要基于 Hystrix 1.5.X 版本 1. 概述 2. HystrixCircuitBreaker 3. HystrixCircuitBreaker....

5287
来自专栏杨龙飞前端

scrollto 到指定位置

2494
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2632

扫码关注云+社区