c - 连续使用glMatrixMode()?
问题描述
如何连续使用两种不同的矩阵模式?glOrtho()
即,假设我想对投影矩阵进行一些操作。所以我打电话glMatrixMode(GL_PROJECTION)
,然后执行操作。据我了解,使用glPushMatrix()
会将这些更改应用于投影矩阵。现在我想对模型视图矩阵进行一些更改。我对如何正确执行此操作感到困惑。我是弹出矩阵然后调用glMatrixMode
还是继续glMatrixMode
?
解决方案
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()
推荐阅读
- resilience4j - 将 Prometheus 指标与 CircuitBreakerConfigCustomizer 一起使用
- jmeter - 如何管理客户端证书的大型密钥库以使用 JMeter 加载测试 Mutual TLS
- python - 用python中的字符串替换列表中的多个字符串并获取替换字符串出现的计数
- javascript - Android反应原生接近传感器
- python - sqlalchemy 连接烧瓶
- javascript - 获取请求后重定向需要两次点击?
- objective-c - TVOS 上的 contentOverlayView 未显示
- assembly - 如何在 x86 程序集中将 16 位寄存器移动到 8 位寄存器?
- regex - Delphi中用于StringList中所有匹配行的正则表达式
- c++ - 我是否正确推理缓存性能?