02总结--001--OpenGL 初识

2020-07-02  本文已影响0人  修_远

[TOC]

前言
万事开头难,是因为我们开头的时候不知道从哪入手学习 OpenGL 这个庞大的体系。
站在巨人的肩膀上,才能看的更远,走得更快。这里推荐 CC老师的简书
书籍是人类进步的阶梯,在 OpenGL 的学习中,有两本堪比圣经的书籍
红宝书:《OpenGL 编程指南》,当前版本是第9版
蓝宝书:《OpenGL 超级宝典》,当前版本是第5版

一、学习阶段

1.1 OpenGL 阶段:

1.2 OpenGL ES 阶段:

1.3 Metal 阶段:

二、OpenGL 初识

2.1 图形API简介

2.2 图形API目的解决什么问题

简单来说,就是实现图形的底层渲染

OpenGL/OpenGL ES/Metal 在任何项目中解决问题的本质:
就是利用 GPU芯片 来高效渲染图形图像
图形API是iOS开发者唯一接近GPU的方式。

2.3 OpenGL 专业名词解释[重点]

以下这些专有名词会贯穿整个 OpenGL 的学习,所以要对每一个名词都要烂熟于心。

OpenGL 上下文 [context]

OpenGL 状态机

渲染(Rendering)

顶点数组(VertexArray)和顶点缓冲区(VertexBuffer)

管线

固定管线/存储着色器

着色器程序 Shader

顶点着色器(VertexShader)

片段着色器程序(FragmentShader)

GLSL(OpenGL Shading Language)

光栅化(Resterization)

纹理

混合(Blending)

变换矩阵(Transformation)

投影矩阵(Projection)

渲染上屏/交换缓存区(SwapBuffer)

2.4 OpenGL下坐标系解析

这个有点抽象,需要多花点时间理解下

物体、世界、照相机空间 -> 右手系
规范空间 -> 左手系

2.5 图片/图形从文件渲染到屏幕过程解析

探讨iOS 中图片的解压缩到渲染过程

2.6 OpenGL 案例

上面看了这么多的理论知识,到这里终于可以开始从代码层面来认识 OpenGL 了。

案例01:固定管线下使用 OpenGL 渲染三角形

案例02:固定管线下使用 OpenGL 渲染正方形、并移动

案例03:固定管线下使用 OpenGL 绘制图形

void draw() {

    glClear(GL_COLOR_BUFFER_BIT);
    
    const GLfloat factor = 0.1f;
    GLfloat x;
    
    /// 绘制坐标轴
    glBegin(GL_LINES);
    glColor3f(1.0f, 1.0f, 1.0f);
    // x 轴
    glVertex2f(-1.0f, 0.0f);
    glVertex2f(1.0f, 0.0f);
    // y 轴
    glVertex2f(0.0f, -1.0f);
    glVertex2f(0.0f, 1.0f);
    glEnd();
    
    /// 绘制曲线 : 正弦
    glBegin(GL_LINE_STRIP);
    glColor3f(1.0f, 0.0f, 0.0f);
    for (x=-1.0f/factor; x<1.0f/factor; x+=0.01f) {
        glVertex2f(x*factor, sin(x)*factor);
    }
    glEnd();
    
    /// 绘制曲线 : 余弦
    glBegin(GL_LINE_STRIP);
    glColor3f(0.0f, 1.0f, 0.0f);
    for (x=-1.0f/factor; x<1.0f/factor; x+=0.01f) {
        glVertex2f(x*factor, cos(x)*factor);
    }
    glEnd();
    
    /// 绘制曲线 : 正切
    glBegin(GL_LINE_STRIP);
    glColor3f(0.0f, 0.0f, 1.0f);
    for (x=-1.0f/factor; x<1.0f/factor; x+=0.01f) {
        glVertex2f(x*factor, tan(x)*factor);
    }
    glEnd();
    
    glFlush();
}
三角函数

三、总结

3.1 带着问题学习

OpenGL 本身就是一门比较晦涩的语言,如果我们在学习过程中没有任何的想法,完全是去读别人的思想,很难取得进展的。
只有自己最清楚自己不理解的地方,将这些地方提出来,在学习的过程中去寻找答案,你一定能收获到很多你自己意向不到的知识。

笔者这里在初始 OpenGL 的过程中存在以下一些问题:

3.2 获取其他资料

OpenGL 的API 相对于 iOS开发者来说,显得有一点晦涩难懂,体现在接口调用的方式、参数的设置、面向过程等,都会给我们带来极大的困惑,所以笔者这里找到了一本 OpenGL 的API手册,有中文注释,可查询方法,相对于直接看英文注释来说更加容易理解。

OpenGL4.5中文手册
上一篇 下一篇

猜你喜欢

热点阅读