美文网首页
GLKit 如加载1张图片

GLKit 如加载1张图片

作者: 程一刀 | 来源:发表于2020-11-30 18:44 被阅读0次
    1.初始化
    -(void)setUpConfig
    {
        context = [[EAGLContext alloc]initWithAPI:kEAGLRenderingAPIOpenGLES3];
        if (!context) {
        }
        [EAGLContext setCurrentContext:context];
        GLKView *view =(GLKView *) self.view;
        view.context = context;
        view.drawableColorFormat = GLKViewDrawableColorFormatRGBA8888;
        view.drawableDepthFormat = GLKViewDrawableDepthFormat16;
        glClearColor(1, 0, 0, 1.0);
    }
    
    
    2.加载顶点坐标/纹理坐标
    -(void)setUpVertexData
    {
        GLfloat vertexData[] = {
            0.5, -0.5, 0.0f,    1.0f, 0.0f, //右下
            0.5, 0.5, -0.0f,    1.0f, 1.0f, //右上
            -0.5, 0.5, 0.0f,    0.0f, 1.0f, //左上
            -0.5, -0.5, 0.0f,   0.0f, 0.0f, //左下
            0.5, -0.5, 0.0f,    1.0f, 0.0f, //右下
            -0.5, 0.5, 0.0f,    0.0f, 1.0f, //左上
        };
        GLuint bufferID;
        glGenBuffers(1, &bufferID);
        glBindBuffer(GL_ARRAY_BUFFER, bufferID);
        glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);
    
        glEnableVertexAttribArray(GLKVertexAttribPosition);
        glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 5, (GLfloat *)NULL + 0);
        glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
        glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 5, (GLfloat *)NULL + 3);
    }
    
    3.加载纹理数据
    -(void)setUpTexture
    {
        NSString *filePath = [[NSBundle mainBundle]pathForResource:@"logo" ofType:@"png"];
        //纹理坐标原点是左下角,但是图片显示原点应该是左上角.
        NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:@(1),GLKTextureLoaderOriginBottomLeft, nil];
        GLKTextureInfo *textureInfo = [GLKTextureLoader textureWithContentsOfFile:filePath options:options error:nil];
        cEffect = [[GLKBaseEffect alloc]init];
        cEffect.texture2d0.enabled = GL_TRUE;
        cEffect.texture2d0.name = textureInfo.name;
    }
    
    4.代理中绘制
    - (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
    {
        glClear(GL_COLOR_BUFFER_BIT);
        [cEffect prepareToDraw];
        glDrawArrays(GL_TRIANGLES, 0, 6);
    }
    
    
    注意点:

    (1) xib中的view 要继承GLKView
    (2) 纹理坐标原点是左下角,但是图片显示原点应该是左上角

    相关文章

      网友评论

          本文标题:GLKit 如加载1张图片

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