比例矩阵到位

时间:2015-03-19 22:17:48

标签: java android matrix opengl-es scale

目前我正在缩放像这样的矩阵:

public void scale(float aw, float ah){
    Matrix.scaleM(modelMatrix, 0, aw, ah, 1f);
    updateMVP();
}

private void updateMVP(){
    Matrix.multiplyMM(mvpMatrix, 0, projectionMatrix, 0, modelMatrix, 0);
}

在我的顶点着色器中使用:gl_Position = u_Matrix * a_Position;u_MatrixmvpMatrix。我使用的相机是默认设置,projectionMatrix由以下设置创建:

ASPECT_RATIO = (float) height / (float) width;
orthoM(projectionMatrix, 0, -1f, 1f, -ASPECT_RATIO, ASPECT_RATIO, -1f, 1f);

现在我可以正确地缩放我的对象,但唯一的问题是每次缩放矩阵时,对象都会移动一点点。我想知道如何在保持中心点并且没有物体平移的情况下缩放矩阵。任何人都知道如何在Android上的OpenGL ES 2.0中做到这一点?谢谢

1 个答案:

答案 0 :(得分:1)

你还有其他矩阵(轮换/翻译)吗?

如果是这样的话:您可能没有按照正确的顺序将矩阵相乘,这可能会导致问题。

(正确的顺序从右到左) 翻译*旋转*比例

您的错误听起来像这里解释的那样:

  

您将船翻译为(10,0,0)。它的中心现在有10个单位。   你将你的船缩放2.每个坐标相对于原点乘以2,这是很远的...所以你最终得到一个大的   船,但以2 * 10 = 20为中心。这是你不想要的。

http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/