现在音视频类应用越来越多,特别是5G时代后,会出现井喷状态,所以开始学习这类东西。
OpenGL,OpenGL ES ,Metal等,今天先说OpenGL。
OpenGL是跨平台的,在Xcode中可以用C++来写(对于一个入行就开始做iOS的我来说,学习一门新的语言也是一道坎!!!)
OpenGL其实更多的是操作GPU(CPU20%的运算,80%的逻辑业务。GPU是100%的运算。CPU是在多调线程中来回迅速切换,以此来实现多线程。而GPU本身就可以实现多线程运算)
OpenGL与OpenGL ES的区别在于:OpenGL ES主要针对嵌入式设备使用,被简话的OpenGL。
在了解OpenGL之前,先了解一些术语:
光栅化:实际绘制/填充每个顶点之间的像素形成线程。(通俗的讲,就是根据代码绘制成像素让我们开到的过程)
着色:沿着顶点之间改变颜色值,能够强送创建光照一个立方体的效果。
纹理贴图:将一张图片附着到绘制的图像上。
混色:颜色混合效果。
坐标系:2D,3D。
图元:组成图像的基本单元。
GLSL:专门为图形开发设计的编程语言。
渲染管线:顶点数据-->顶点着色器-->细分着色器-->几何着色器-->图元设置-->剪切-->光栅化-->片元着色器-->效果。一套流程就为管线。
这里顶点着色器为必要的,细分和几何是可选的(90%的可能用不到),片元着色器必选。
上面说了管线,其实OpenGL在最开始给了我们一个固定管线,只需要传进来参数就可以解决问题。但是这并不能满足很多东西,特别是航空,军事,医疗方面,所以就有了一套语言GLSL和可编程管线。
理论知识完了,先段代码理解下:
这个方法是改变窗口大小,注意前面2位0,0是坐标原点,这里和iOS不一样,iOS的坐标原点在左上,这里是左下!
void ChangeSize(int w,int h) {
glViewport(0,0, w, h);
}
void SetupRC() 为程序作一次性的设置,如果是一个固定的图形,可以直接把坐标系放里面。这里还有初始化着色器等等
int main(int argc,char* argv[]) 很多初始化的东西可以放在这里面,这里不详细说里面的东西,下面有代码有注释,可以看!
void RenderScene(void) 真正开始渲染的地方是这里!
void SpeacialKeys(int key, int x, int y) 特殊按键处理!目前我们先处理的都是方向键!转动图形!
上面的方法名除了main,其他都是可以更改的,但是参数是不能更改的!今天的代码只为理解初步使用!