1. gl_Position 是GLSL的内建变量。它可以直接在顶点着色器里边使用,而且你也不需要在后面的程序中使用。它默认是归一化的裁剪空间坐标,xyz各个维度的范围是(-1,1)。它仅能在顶点着色器使用,既是输入也是输出。
2. OpenGL仅当3D坐标在三个轴上(x,y和z)上都为-1.0到1.0的范围内时才处理它。所有在所谓的标准化设备坐标范围内的坐标才会最终呈现在屏幕上。
3. 摄像机向后移动,和整个场景向前移动是一样的 (远平面,与透视投影有关)。摄像机向后移动即向Z轴正半轴移动,相当于它所捕捉的far平面与near平面之间的场景变成了近的场景。
4. OpenGL本身没有摄像机的概念,但我们可以通过场景中的所有物体往相反方向移动的方式来模拟处摄像机,产生出一种我们在移动的感觉,而不是场景在移动。
5. view = glm::lookAt(cameraPos, cameraPos + cameraFront, cameraUp); 摄像机位置设置为之前定义的cameraPos。方向是当前的位置加上我们刚刚定义的方向向量。这样能保证无论我们这么移动,摄像机都会注视着目标方向。
6. 片段着色器的计算都是在世界坐标进行 (整个世界,非观察view),而不是在视图坐标 (观察view)。因此在片段着色器参数的计算时仅仅乘以model即可,normal法线向量比较特殊。
7. 对于较为一般的情况,我们通常需要两种贴图,漫反射贴图与镜面反射贴图。因为对于一个物体(比如金属框的木箱),通常木箱没有高光而金属框有高光。
8. 在VS2019中,模型的obj文件不能添加到项目中(右键->添加到项目中),你直接将模型文件夹放到项目中或者自己定义路径。注意:模型文件下的mti文件里边是有路径的,需要自己改或不改。
9.
glActiveTexture(GL_TEXTURE0,+i);
要理解这句代码,需要找到GL_TEXTURE0的源码,
可以看出GL_TEXTURE0只是一个ID,通过 + i 可以实现GL_TEXTURE0 到 GL_TEXTURE31 的使用。这样递加方便我们使用。
10. OpenGL的深度测试的Z是测量顶点到相机的距离。因此才需要GL_LESS,寻找最小。