反向执行矩阵乘法

时间:2015-05-06 15:00:00

标签: java opengl math matrix lwjgl

  

后续行动:Calculating world coordinates from camera coordinates

我将2D矢量与变换矩阵(OpenGL的模型视图矩阵)相乘,以从我的相机坐标中获取世界坐标。

我这样计算:

private Vector2f toWorldCoordinates(Vector2f position) {

    glPushMatrix();
    glScalef(this.zoom, this.zoom, 1);
    glTranslatef(this.position.x, this.position.y, 0);
    glRotatef(ROTATION, 0, 0, 1);

    ByteBuffer m = ByteBuffer.allocateDirect(64);
    m.order(ByteOrder.nativeOrder());
    glGetFloatv(GL_MODELVIEW_MATRIX, m);

    float x = (position.x * m.getFloat(0)) + (position.y * m.getFloat(4)) + m.getFloat(12);
    float y = (position.x * m.getFloat(16)) + (position.y * m.getFloat(20)) + m.getFloat(28);

    glPopMatrix();
    return new Vector2f(x, y);
}

现在我也想反过来这样做:计算世界上某个位置的摄像机坐标。我该如何改变这个计算?

1 个答案:

答案 0 :(得分:2)

要创建表示上述逆变换的矩阵,请反向应用变换,旋转和平移的负数量以及缩放的反量:

glRotatef(-ROTATION, 0, 0, 1);
glTranslatef(-this.position.x, -this.position.y, 0);
glScalef(1.0f / this.zoom, 1.0f / this.zoom, 1);

然后像以前一样乘以位置矢量。

另一种方法是计算inverse matrix,但这种方式更简单。