我将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);
}
现在我也想反过来这样做:计算世界上某个位置的摄像机坐标。我该如何改变这个计算?
答案 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,但这种方式更简单。