美文网首页
在iPhone上使用OpenGLes绘制一个三角形

在iPhone上使用OpenGLes绘制一个三角形

作者: enghou123 | 来源:发表于2020-09-28 17:49 被阅读0次

    OpenGLes是一套跨平台的纯C的API,是OpenGL的子集。大名鼎鼎GPUImage就是对OpenGLes的封装,而熟悉GPUImage对于在iOS上处理音视频的工程师来说是必不可少的技能,因此想要在iOS做音视频处理就不能不了解OpenGLes。

    要使用OpenGLES绘图,首先,你得有一个GLKView,这是一个专门用来绘制3d内容的UIView,然后为这个GLKView初始化好一个绘图的上下文,叫做EAGLContext,并把该EAGLContext设置成当前绘图上下文,这个其实很好理解,我们使用CoreGraphics时,同样也需要设置当前上下文,就好比我们要开始画画了,要先选一张画布一样。接下来我们要准备好我们的数据,在OpenGL的默认坐标系下,原点在屏幕正中间,右上为正,左下为负,z坐标往屏幕外为正,往屏幕内为负。由于我们只是绘制一个二维的三角形,z坐标直接设为0就好,其他点可以随意设置,只要能构成一个三角形。准备好数据后,就要将数据送往GPU,同时告诉GPU如何处理这些数据(通过定点着色器与片元着色器)。

    下面看配置代码

        GLKView *view = (GLKView *)self.view;

        view.context = [[EAGLContext alloc]initWithAPI:kEAGLRenderingAPIOpenGLES2];

        [EAGLContext setCurrentContext:view.context];

        //使用GLKBaseEffect是因为该类可以代替着色器实现简单的效果,我们不需要再编写着色器,如果需要自定义显示效果,那就要自己写着色器了

        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);//背景颜色

        staticconstSceneVertexvertices[] = {

            {{-1,-1,0.0}},

            {{1,-1,0.0}},

            {{-1,1,0.0}},

        };

         GLuintname;

        glGenBuffers(1, &name);//生成缓存,该缓存通过name来标识

        glBindBuffer(GL_ARRAY_BUFFER, name);//将缓存绑定到GL_ARRAY_BUFFER

        glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);//将数据送入GPU内存,各个参数的意义:1,目标内存 2.拷贝多少数据,单位字节,3.数据起始地址,4.数据的用途,一般用GL_STATIC_DRAW

        //开启绘制的属性

        glEnableVertexAttribArray(GLKVertexAttribPosition);

        //为GLKVertexAttribPosition指定数据格式,参数意义为1.绘制属性2.该属性有几个组件3.每个组件时什么类型4.是否正则化,一般传GL_FALSE 5.步长,即下一个该属性的数据距离上一个该属性的数据有多少字节 6起始偏移

        glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(GLKVector3), NULL);

    在定时器里绘制

    //清理颜色缓冲区

        glClear(GL_COLOR_BUFFER_BIT);

        //开始准备绘制

        [self.baseEffect prepareToDraw];

        //绘制三角形各个参数含义: 1.绘制类型 2.从第几个定点开始绘制 3.绘制几个顶点

        glDrawArrays(GL_TRIANGLES, 0, 3);

    相关文章

      网友评论

          本文标题:在iPhone上使用OpenGLes绘制一个三角形

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