前一段时间面试前端岗位碰壁,决定静下心来好好学习提升一下自己。最近入了OpenGL这个深坑,有很多想法想分享给大家。还有一个写这系列教程原因是目前高校的计算机图形学课都用OpenGL做实验,而网上的资源比较少(指早期OpenGL),所以也是给学弟学妹的踩坑经历分享😂。
我对OpenGL的理解
OpenGL本质上是一个渲染图形的API。它是跨平台、跨语言的,并且非常底层可以和GPU直接交流。目前,OpenGL有四个大版本分为两种编程方式—— 固定渲染管线 和 可编程渲染管线 编程方式。同时,OpenGL又是一个规范,它由Khronos组织维护,具体实现则是由各个GPU生产商实现的。
早期OpenGL就是 固定渲染管线 的编程方式的,OpenGL1.0到4.0都支持。它主要以图元的方式渲染制图,这与微软MFC的GDI很相似,就是通过调用不同的函数画不同的图形。而与之对应的现代OpenGL是 可编程渲染管线 的编程方式,它更接近底层的GPU渲染,用户操作起来更自由但是更难上手。本篇教程两者都有介绍。
我对OpenGL相关的理解
- GLUT/GLFW
GLUT就是OpenGL的具体API。由于OpenGL过于底层,我们不能对其直接操作,所以我们要借助GLUT中的函数来实现我们想要的具体功能。但是GLUT本身并不是很完善,只能做一些简单的,小规模的程序。而GLFW是GLUT的进化版,虽然实现的功能差不多,但是它更完善与OpenGL4.0更贴切。
- GLEW
GLEW是OpenGL的扩展库,它是基于C/C++开发的。当我们需要最新的OpenGL功能时就需要调用这个库内的函数实现。此外,它还包括WGL、GLX的扩展功能。
- GLM
GLM是OpenGL的数学库,是用来做图形的变换的(例如旋转、平移和斜切等)。很多时候它就是一个头文件,只要在项目中加载就可以了。
- GLSL
GLSL是一种对着色器操作的语言,有点类似C语言,它包含一些针对向量和矩阵操作的有用特性。这在现代OpenGL中经常用到。
接下来就是入手OpenGL了,我打算先从早期OpenGL入手。