由于个人想将opengl作为一个完整的项目进行学习,因此会有不少在多项目工程下产生的坑
- 遇到glad函数错误(指向00000)。是指glad没有初始化成功。如果要在某个项目里使用glad函数的话,每个项目单独需要进行一次初始化。(简单来说几个项目用到了glad函数,就要初始化几次)
不能在.h文件里使用glad函数(其实仔细想想,这个宏是指向静态变量的,静态变量是定义在.c文件里的) - 遇到glfw函数为空错误。可能是之前某个函数传参出错。 可能的情况:
- glBufferData传参错误
投影矩阵的推导
详细的矩阵推导可以看Games101的课程,里面的解说十分完备。这里对课上所推导的矩阵与glm库所使用的矩阵进行比较与辨析。
首先明确这里讲的是右手坐标系、行存储、另外所有的n和f都为负值
正交矩阵
如上图,将长方体移动到中心并将边长标准化为2,即坐标范围为[-1,1],需要先移动再缩放
M o r t h o = [ 2 r − l 0 0 0 0 2 t − b 0 0 0 0 2 n − f 0 0 0 0 1 ] [ 1 0 0 − r + l 2 0 1 0 − t + b 2 0 0 1 − n + f 2 0 0 0 1 ] = [ 2 r − l 0 0 − r + l r − l 0 2 t − b 0 − t + b t − b 0 0 2 n − f − n + f n − f 0 0 0 1 ] ∵ r + l = 0 , t + b = 0 ∴ = [ 2 r − l 0 0 0 0 2 t − b 0 0 0 0 2 n − f − n + f n − f 0 0 0 1 ] \begin{aligned} M_{ortho}&=\left[\begin{matrix} \frac 2 {r-l}&0&0&0 \\ 0&\frac 2 {t-b}&0& 0\\0&0&\frac 2 {n-f}&0\\0&0&0&1\end{matrix}\right] \left[\begin{matrix} 1&0&0&-\frac {r+l}{2} \\ 0&1&0& -\frac {t+b}{2} \\0&0&1&-\frac {n+f}{2} \\0&0&0&1\end{matrix}\right]\\ &=\left[\begin{matrix} \frac 2 {r-l}&0&0&-\frac {r+l}{r-l} \\ 0&\frac 2 {t-b}&0& -\frac {t+b}{t-b} \\0&0&\frac 2 {n-f}&-\frac {n+f}{n-f} \\0&0&0&1\end{matrix}\right]\\ &\because r+l=0,\ t+b=0\\ \therefore&=\left[\begin{matrix} \frac 2 {r-l}&0&0&0 \\ 0&\frac 2 {t-b}&0& 0 \\0&0&\frac 2 {n-f}&-\frac {n+f}{n-f} \\0&0&0&1\end{matrix}\right]\\ \end{aligned} Mortho∴=⎣⎢⎢⎡r−l20000t−b20000n−f2