iOS OpenGL ES简单绘制三角形

本文介绍如何在iOS平台使用OpenGL ES通过GLKit进行2D/3D图形编程,具体步骤包括创建OpenGL ES上下文、使用GLKBaseEffect简化绘制过程、设置顶点数据、生成和绑定缓冲区,以及绘制一个简单的三角形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

OpenGL 是用于2D/3D图形编程的一套基于C语言的统一接口. windows,Linux,Unix上均可兼容.

OpenGL ES 是在OpenGL嵌入式设备上的版本, android/iOS 等. 在iOS平台上OpenGL有三个版本OpenGL 1.0/2.0/3.0

基本原理, 可以通过OpenGL ES驱动GPU图形处理器 实现图形编程.

 

在iOS上, 基于GLKit,  对OpenGL ES 的再次封装, 辅助我们快速的使用OpenGL ES

//完成一个简单的绘制, 三角形

typedef struct {
    GLKVector3 positonCoords;
}sceneVertex;

@interface GLViewController ()

@property(nonatomic,strong)GLKBaseEffect *baseEffect;
@property(nonatomic,assign)GLuint vertexBufferID;//缓存ID属性

@end

@implementation GLViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    //1.创建OpenGLE ES上下文
    GLKView *view = (GLKView *)self.view;
    view.context = [[EAGLContext alloc]initWithAPI:kEAGLRenderingAPIOpenGLES2];
    [EAGLContext setCurrentContext:view.context];
    
    //2.GLKBaseEffect属性, 使我们不需要编写shader language(着色器)代码就可以简单完成绘制
    self.baseEffect = [[GLKBaseEffect alloc]init];
    self.baseEffect.useConstantColor = GL_TRUE;//使用静态颜色绘制
    self.baseEffect.constantColor = GLKVector4Make(1.0f, 1.0f, 1.0f, 1.0f);//设置绘制颜色 rgba
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);//背景颜色
    
    //3.定点数据
    static const sceneVertex vertices[] = {
        {{-0.5f,-0.5f,0.0}},
        {{0.5f,-0.5f,0.0}},
        {{-0.5f,0.5f,0.0}},
    };
    
    //4.生成缓存,并为缓存提供数据
    glGenBuffers(1, &_vertexBufferID);//申请一个标识符
    glBindBuffer(GL_ARRAY_BUFFER, _vertexBufferID);//将标识符绑定到GL_ARRAY_BUFFER
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);//复制定点数据从CPU 到 GPU
    
    //5.代理方法
    
    //6.dealloc 中,释放缓存数据
    
}

//系统给我们回调的绘制消息,该方法会一直被调用,和display方法一致
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect{
    [self.baseEffect prepareToDraw];
    
    //clear Frame buffer
    glClear(GL_COLOR_BUFFER_BIT);
    //开启对应的定点缓存属性
    glEnableVertexAttribArray(GLKVertexAttribPosition);
    //设置缓存数据指针,从顶点数组中读取数据
    glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(sceneVertex), NULL);
    //绘图
    glDrawArrays(GL_TRIANGLES, 0, 3);
    
    
    
}

- (void)dealloc{
    GLKView *view = (GLKView *)self.view;
    [EAGLContext setCurrentContext:view.context];
    if (_vertexBufferID != 0) {
        glDeleteBuffers(1, &_vertexBufferID);
        _vertexBufferID = 0;
    }
    
    
}

最终效果:

 

转载于:https://www.cnblogs.com/daxueshan/p/11131239.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值