欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OpenGL 之 glLoadMatrix 无法加载矩阵

程序员文章站 2022-03-05 09:28:53
...

OpenGLOpenGL 中,可以通过变换矩阵来实现视图的变化,想要获取变换矩阵,可以使用 glGetFloatvglGetFloatv 或者 glGetDoublevglGetDoublev,参数是两个,前者是想要获取的矩阵,后者是一个指针,将获得的数据存放到指针指向的位置。

glGetFloatv(GL_PROJECTION_MATRIX, mat);	//	获取投影矩阵
glGetDoublev(GL_MODELVIEW_MATRIX, mat);	//	获取视图模型矩阵

如果想要给变换矩阵传数据,则需要使用 glLoadMatrixfglLoadMatrixf 或者 glLoadMatrixdglLoadMatrixd 来传,参数只有一个,就是要传输的数据,不过需要实现切换到所要传数据的矩阵。

glMatrixMode(GL_MODELVIEW);	//	切换到视图模型矩阵
glLoadMatrixf(mat);			//	给该矩阵传值
glMatrixMode(GL_PROJECTION);//	切换到投影矩阵
glLoadMatrixd(mat);			//	……

这里需要注意的是,这些矩阵并不是常规的按照行主序,而是列主序,并且 matmat 并不是 444*4 的二维数组,而是空间为 1616 个单位的数组,这里需要格外注意。

说了这么多,那么问题的关键来了,问题很容易描述,在某些时候,总是会出现可以获取变换矩阵,却无法加载变换矩阵(给矩阵赋值),运行也没有任何报错信息,视图也没有任何的变化,查看矩阵后发现 glLoadMatrixglLoadMatrix 函数并没有实现功能。

解决方案:经过再三查找,发现我的 glLoadMatrixglLoadMatrix 前使用了……

glBegin(GL_POINTS);

后边使用了……

glEnd();

也就是卡在这两个函数之间,这部分主要是进行渲染,无法修改变换矩阵,所以只需要将 glLoadMatrixglLoadMatrix 放到这两个函数之外就可以了。

这就很坑了,按道理遇见这种情况应该报错才行,可是编译运行的时候,一点点报错信息都没有,甚至没有一点点警告,太坑了。

相关标签: OpenGL