【问题标题】:Is it possible in OpengGL to insert a transformation to a matrix before the existing transformations? (prefix multiplication)在 OpengL 中是否可以在现有转换之前将转换插入矩阵? (前缀乘法)
【发布时间】:2013-02-09 03:46:38
【问题描述】:

为了提供一些关于我正在使用 Box2D 的问题的背景知识,并尝试使用内置的调试绘制功能来创建一个调试叠加层,这将使我能够在游戏图形上看到物理体的实际形状。问题出现在通过在渲染场景之前平移和旋转模型视图矩阵实现的移动视图系统以及 Box2D 坐标是屏幕坐标的较小比例因子的事实(在当前项目的情况下,我将屏幕坐标相乘) 0.05 得到 box2D 坐标)。这两个功能独立工作正常。

当需要使用 Box2D 的调试渲染时,我可以通过缩放模型视图矩阵来轻松进行缩放,但前提是视图系统根本没有对其进行转换。之后,如果我对缩放后的模型视图应用与使用视图系统对原始模型视图所做的相同的转换,我会得到正确的结果。我知道如何让它以相当昂贵的方式工作,但如果有某种方法可以在 OpenGL 中插入转换(也就是使用前缀乘法而不是通常的后缀),那会容易得多。

我正在使用没有着色器的旧 OpenGL 内置矩阵,所以我只使用 glTranslate 和 glRotate 等函数来操作矩阵。有没有办法直接读取/写入矩阵中的值或某种 OpenGL 设置来应用转换?

【问题讨论】:

  • 没有办法(AFAIK)改变矩阵乘法的顺序。你可以调用 glGetDoublev(GL_MODELVIEW_MATRIX,current_matrix);然后自己做乘法并使用 glLoadMatrixd(new_matrix); 设置矩阵;

标签: opengl matrix box2d transformation


【解决方案1】:

有没有办法直接读取/写入矩阵中的值

是的,有glGetDoublev(我建议为此使用双精度)可以查询各个堆栈上的当前矩阵。见http://www.opengl.org/sdk/docs/man2/xhtml/glGet.xml

然后就可以使用了

glPushMatrix();
glLoadIdentity();
your_transformation();
glMultMatrix(queried_matrix);

在堆栈上的内容之前应用您自己的转换。使用glPopMatrix 自行清理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多