OpenGL(1)入门基础
参考资料:https://www.jianshu.com/p/92208a75283d
1、初识OpenGL
OpenGL(Open Graphics Library)是一个跨编程语言、跨平台的图形应用程序编程接口,它将计算机的资源抽象称为一个个OpenGL的对象,对这些资源的操作抽象为一个个的OpenGL指令。
它已经被广泛应用在游戏、影视、军事、航天航空、地理、医学、机械设计及各类科学可视化的领域。
OpenGL ES(OpenGL for Embedded Systems)是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等移动端设备而设计,去除了许多不必要和性能较低的API接口。
2. 概念
3D:2D+透视 = 3D
光栅化(Rasterize/rasteriztion):把矢量图形转化成像素点儿的过程
渲染管线(Pipeline):是指三维渲染的过程中显卡执行的、从几何体到最终渲染图像的、数据传输处理计算的过程。或一系列有序的处理阶段的序列,用于把我们应用程序中的数据转化为生成一个最终的图像的一个过程
着色器(Shader):沿着顶点之间改变颜色值,比如:画画的时候我们经常有这么一个过程:先打线稿,再上色的过程。
通常着色器分两种:
- 顶点着色器(vertex shader)这个是告诉电脑如何打线稿的——如何处理顶点、法线等的数据的程序。
- 片面着色器(fragment shader)这个是告诉电脑如何上色的——如何处理光、阴影、遮挡、环境等等对物体表面的影响,最终生成一副图像的程序。
图元:组成图像的基本单元(OpenGL中有7种基本几何图元),它只是顶点的集合以预定义的方式结合在一起而已。
点、线、三角形,这三种可以组合形成线环,线带,三角形带,三角形扇、三角形金字塔等
GLSL:专门为图形开发设计的编程语言,还有
3. CPU和GPU
CPU和GPU内部都是由计算单元、控制器和寄存器组成的,占比不一样,CPU大部分面积为控制器和寄存器,与之相比,GPU拥有更多的ALU逻辑运算单元,用于数据处理。
截屏2021-03-04 下午3.17.53.png如图:绿色的是计算单元,橙红色的是存储单元,橙黄色的是控制单元。
其设计目标的不同,它们分别针对了两种不同的应用场景。
- GPU进行各种绘制计算机图形所需的运算,包括顶点设置、光影、像素操作等,它具有高并行结构(highly parallel structure),所以GPU在处理图形数据和复杂算法方面拥有比CPU更高的效率。
- CPU大部分面积为控制器和寄存器,CPU执行计算任务时,一个时刻只处理一个数据,不存在真正意义上的并行,CPU有强大的ALU(算术运算单元),它可以在很少的时钟周期内完成算术计算。
- GPU具有多个处理器核,在一个时刻可以并行处理多个数据。
CPU和GPU因为最初用来处理的任务就不同,所以设计上有不小的区别。而某些任务和GPU最初用来解决的问题比较相似,所以用GPU来算了。GPU的运算速度取决于雇了多少小学生,CPU的运算速度取决于请了多么厉害的教授。教授处理复杂任务的能力是碾压小学生的,但是对于没那么复杂的任务,还是顶不住人多。当然现在的GPU也能做一些稍微复杂的工作了,相当于升级成初中生高中生的水平。但还需要CPU来把数据喂到嘴边才能开始干活,究竟还是靠CPU来管的。
什么类型的程序适合在GPU上运行?
(1)计算密集型的程序。所谓计算密集型(Compute-intensive)的程序,就是其大部分运行时间花在了寄存器运算上,寄存器的速度和处理器的速度相当,从寄存器读写数据几乎没有延时。可以做一下对比,读内存的延迟大概是几百个时钟周期;读硬盘的速度就不说了,即便是SSD, 也实在是太慢了。
(2)易于并行的程序。GPU其实是一种SIMD(Single Instruction Multiple Data)架构, 他有成百上千个核,每一个核在同一时间最好能做同样的事情。