OpenGL 之 glLoadMatrix 无法加载矩阵

版权声明:听说这里让写版权声明~~~ https://blog.csdn.net/f_zyj/article/details/83065463

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 放到这两个函数之外就可以了。

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

阅读更多

扫码向博主提问

f_zyj

弱校 ACM 竞赛拓荒者,从零到区域赛银
  • 擅长领域:
  • ACM
  • 挑战程序设计
  • C/C++
去开通我的Chat快问
换一批

没有更多推荐了,返回首页