0

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

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

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

4

1 回答 1

1

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

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

然后你可以使用

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

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

于 2013-02-08T19:46:38.403 回答