使用结构体有一个问题,可以在结构体外部任意获取和修改其成员变量,带来了很大安全隐患,为此 C++ 引入了一个全新的概念,类!类相比结构体,除了有成员变量外,还可以定义成员函数,调用者通过成员函数来获取或修改成员变量,以达到保护的作用;当然类还有其它很多的功能和好处,其中一点就是面向对象的思想。
【OpenGL】坐标系统
OpenGL 引入五个坐标空间,分别是局部坐标、世界坐标、观察坐标、裁剪坐标和屏蔽坐标,每个坐标空间想到独立,各司其职;创建一个对象时,往往使用的是局部坐标,渲染的时候通过一步步转换最后变成屏幕坐标在屏幕上绘制。
【OpenGL】使用贴图
使用 SOIL 库或 stb 库来加载纹理,得到纹理数据、纹理宽度、纹理高度、通道数,然后把纹理数据填充到纹理对象,最后释放纹理数据。然后设置纹理的一些参数,比如纹理环绕方式,是否启用多级渐变纹理,纹理过滤方式以及多级纹理渐变方式。OpenGL 会给纹理采样器一个位置值,一个纹理位置称为一个纹理单元,对应一个纹理对象,最多可以设置 16 个纹理单元。
【OpenGL】其它绘制方式
顶点缓冲对象 VBO 保存缓冲区中的顶点数据,顶点数组对象 VAO 保存顶点属性,索引缓冲对象 EBO 保存顶点属性的索引。虽然不使用 VAO 也可以正常绘制,但出于规范还是手动管理 VAO 比较好,使用 EBO 来绘制图元可以节省顶点开销,EBO 关联 VAO,VAO 再关联 VBO。
【OpenGL】着色器(二)
GLSL 是一门类 C 语言,为图形计算量身定制,包含了很多针对向量和矩阵运行的特性。GLSL 的变量分为输入变量、输出变量和 uniform 变量,除了基础的数据类型外,还定义了向量、矩阵等常用数据类型。
【OpenGL】着色器(一)
现代 OpenGL 都使用可编程管线,从 OpenGL 3.2 开始,固定管线已经被废弃了,这意味着需要开发者自己编写、编译和链接着色器程序。手写 Shader 无疑增加了学习的成本,但也让开发者能直接接触并操控底层,能够实现更为强大的效果,也有利于学习计算机图形学。