OpenGL 之 glLoadMatrix 无法加载矩阵
在 O p e n G L OpenGL OpenGL 中,可以通过变换矩阵来实现视图的变化,想要获取变换矩阵,可以使用 g l G e t F l o a t v glGetFloatv glGetFloatv 或者 g l G e t D o u b l e v glGetDoublev glGetDoublev,参数是两个,前者是想要获取的矩阵,后者是一个指针,将获得的数据存放到指针指向的位置。
glGetFloatv(GL_PROJECTION_MATRIX, mat); // 获取投影矩阵
glGetDoublev(GL_MODELVIEW_MATRIX, mat); // 获取视图模型矩阵
如果想要给变换矩阵传数据,则需要使用 g l L o a d M a t r i x f glLoadMatrixf glLoadMatrixf 或者 g l L o a d M a t r i x d glLoadMatrixd glLoadMatrixd 来传,参数只有一个,就是要传输的数据,不过需要实现切换到所要传数据的矩阵。
glMatrixMode(GL_MODELVIEW); // 切换到视图模型矩阵
glLoadMatrixf(mat); // 给该矩阵传值
glMatrixMode(GL_PROJECTION);// 切换到投影矩阵
glLoadMatrixd(mat); // ……
这里需要注意的是,这些矩阵并不是常规的按照行主序,而是列主序,并且 m a t mat mat 并不是 4 ∗ 4 4*4 4∗4 的二维数组,而是空间为 16 16 16 个单位的数组,这里需要格外注意。
说了这么多,那么问题的关键来了,问题很容易描述,在某些时候,总是会出现可以获取变换矩阵,却无法加载变换矩阵(给矩阵赋值),运行也没有任何报错信息,视图也没有任何的变化,查看矩阵后发现 g l L o a d M a t r i x glLoadMatrix glLoadMatrix 函数并没有实现功能。
解决方案:经过再三查找,发现我的 g l L o a d M a t r i x glLoadMatrix glLoadMatrix 前使用了……
glBegin(GL_POINTS);
后边使用了……
glEnd();
也就是卡在这两个函数之间,这部分主要是进行渲染,无法修改变换矩阵,所以只需要将 g l L o a d M a t r i x glLoadMatrix glLoadMatrix 放到这两个函数之外就可以了。
这就很坑了,按道理遇见这种情况应该报错才行,可是编译运行的时候,一点点报错信息都没有,甚至没有一点点警告,太坑了。