【发布时间】:2015-07-15 22:26:16
【问题描述】:
我正在用 glm 替换我在项目中使用的 glu 方法,我似乎遇到了一个我无法解释的奇怪差异。当我使用此代码使用 gluPerspective 设置投影矩阵时,我得到了显示:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(70.0f, (GLfloat)w / (GLfloat)h, 0.0001f, 1000.0f);
如果我切换到 glm::perspective,我会得到:
glMatrixMode(GL_PROJECTION);
glm::mat4 projectionMatrix = glm::perspective(70.0f, (GLfloat)w / (GLfloat)h, 0.0001f, 1000.0f);
glLoadMatrixf(&projectionMatrix[0][0]);
很明显,我正在渲染的对象现在在 glm 版本中占据了更多的显示空间。除了将 gluPerspective 换成 glm::perspective 之外,这两个版本没有其他变化。
我猜我可能做错了什么,因为我的理解是 glm::perspective 应该是 gluPerspective 的替代品。但目前我不知道那是什么。
另外,方向的不同是因为对象在场景中被旋转。我只是在动画的不同时间截取了屏幕截图。
【问题讨论】:
-
请注意,如果您仍在使用已弃用的矩阵函数,则使用 glm 并没有太多意义。您应该使用着色器制服。在任何情况下,检查 glm 如何存储它的矩阵,无论它们是存储行优先还是列优先,看看是否匹配
glLoadMatrixf -
我也计划放弃弃用的矩阵函数,但是当我遇到这个问题时,我刚开始用 glm 替换弃用的功能。我还需要删除我对过剩的使用。就顺序而言,glm 应该与 GL 使用的相匹配,因为否则使用起来会有点困难。 glLoadMatrix 调用也取自他们的文档。