本文主要对之前学过的一些东西进行总结,梳理其中的知识点,加深记忆。
通过之前的学习,现在你应该学会了创建一个使用OpenGL的窗口,实现着色器,将顶点数据传递给着色器,使用纹理,理解向量和矩阵的作用,创建一个3D场景并在其中自由漫步。
基于我们已经学到的东西,我们可以做更多的研究。比如,我们理解了观察矩阵生成的原理,那是否可以尝试封装一个类似lookAt的函数来验证我们的原理呢?这些都是很有趣的事,笔者觉得兴奋极了。不过,先得梳理一下知识才行。
知识点
OpenGL:一套图形API规范,由不同的厂商实现内容。
GLAD:一个用于获取OpenGL函数地址的三方库。
视口(viewport):我们渲染的窗口。
图形管线(Graphics Pipeline):一个顶点想要被绘制到屏幕上需要走的流程。
着色器(Shader):一小段运行在图形卡(显卡)上的程序。图形管线中的某些阶段可以用自定义的着色器去替代原有的着色器。
顶点(vertex):代表一个点的数据集。
顶点缓存对象(VBO, Vertex Buffer Object):用于分配内存,保存顶点数据给图形卡使用的一种缓存对象。
顶点数组对象(VAO, Vertex Array Object):保存缓存以及顶点属性状态信息。
元素缓存对象(EBO, Element Buffer Object):保存顶点索引的一种缓存对象。
Uniform:GLSL的一种特殊类型,可以由程序访问,也可以由着色器访问,是程序和着色器的一种“沟通”渠道。
纹理(Texture):贴在物体表面的图片,用于模拟物体的细节。
纹理环绕(Texture Wrapping):告诉OpenGL在指定的纹理坐标超出(0,1)范围时如何采样。
纹理过滤(Texture Filtering):指明有多个纹素可以使用的时候如何进行采样。通常发生在纹理被放大的时候。
Mipmaps:一系列不同尺寸的小图片,随着物体距离观察者远近情况取用。
stb_image:图片加载3方库。
纹理单元(Texture Units):允许多个纹理作用在同一个物体上。
向量(Vector):定义在三维空间中的点或者方向。
矩阵(Matrix):矩形数组的一种表示方式。
GLM:OpenGL的一个数学库
局部空间(Local Space):物体一开始存在的控件。所有的坐标都相对于物体的原点。
世界空间(World Space):所有坐标都相对于一个共同的原点。
观察空间(View Space):所有的坐标都从摄像机的视角观察。
裁剪空间(Clip Space):所有的坐标都从摄像机的视角观察,但是投影已经应用。这个空间是顶点着色器输出的阶段,OpenGL会处理剩下的事情。
屏幕空间(Screen Space):所有的坐标都基于屏幕的原点。坐标范围从0到屏幕的宽高。
LookAt:一个特殊的矩阵,将物体转换到观察空间。
欧拉角(Euler Angles):pitch(绕x轴),yaw(绕y轴),roll(绕z轴)旋转的三个量。
网友评论