比例矩阵到位

Scale matrix in place

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

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 中执行此操作?谢谢

您还有其他矩阵 (rotation/translation) 吗?

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

(正确顺序从右到左相乘) 平移 * 旋转 * 缩放

你的错误听起来像这里解释的那个:

You translate the ship by (10,0,0). Its center is now at 10 units of the origin. You scale your ship by 2. Every coordinate is multiplied by 2 relative to the origin, which is far away… So you end up with a big ship, but centered at 2*10 = 20. Which you don’t want.

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