首页 > 解决方案 > 连续使用glMatrixMode()?

问题描述

如何连续使用两种不同的矩阵模式?glOrtho()即,假设我想对投影矩阵进行一些操作。所以我打电话glMatrixMode(GL_PROJECTION),然后执行操作。据我了解,使用glPushMatrix()会将这些更改应用于投影矩阵。现在我想对模型视图矩阵进行一些更改。我对如何正确执行此操作感到困惑。我是弹出矩阵然后调用glMatrixMode还是继续glMatrixMode

标签: copenglopengl-compat

解决方案


glPushMatrix并且glPopMatrix要存储/恢复当前选择的矩阵。它用于例如子网格(如机械臂),您需要返回到根子网格的状态......

你描述的是什么glMatrixMode。所以你的代码应该是这样的:

glMatrixMode(GL_PROJECTION);
// here your stuff for setting projection
glMatrixMode(GL_MODELVIEW);
// here your stuff for setting modelview

您应该glMatrixMode在操作矩阵的每个代码块之前调用。不要期望当前矩阵设置为您将其设置为最后的东西。这会在以后导致混乱......例如,许多绘图算法在运行时更改模型视图和/或纹理矩阵,并且在您的代码中您可以有这样的东西:

glMatrixMode(GL_MODELVIEW);
// here your stuff for setting modelview
glMatrixMode(GL_PROJECTION);
// here your stuff for setting projection

object1.draw();

// and here the current matrix could be changed from the object1.draw()

推荐阅读