逆向进行矩阵乘法

Doing a matrix multiplication in reverse

Follow-up for:

我将 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);
}

现在我还想反之亦然:计算世界上某个位置的相机坐标。我怎样才能反转这个计算?

要创建一个表示上述矩阵的逆变换的矩阵,请反向应用变换,其中旋转和平移的量为负,缩放的量为反:

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,但这种方法要简单得多。