目前我正在缩放像这样的矩阵:
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_Matrix
为mvpMatrix
。我使用的相机是默认设置,projectionMatrix
由以下设置创建:
ASPECT_RATIO = (float) height / (float) width;
orthoM(projectionMatrix, 0, -1f, 1f, -ASPECT_RATIO, ASPECT_RATIO, -1f, 1f);
现在我可以正确地缩放我的对象,但唯一的问题是每次缩放矩阵时,对象都会移动一点点。我想知道如何在保持中心点并且没有物体平移的情况下缩放矩阵。任何人都知道如何在Android上的OpenGL ES 2.0中做到这一点?谢谢
答案 0 :(得分:1)
你还有其他矩阵(轮换/翻译)吗?
如果是这样的话:您可能没有按照正确的顺序将矩阵相乘,这可能会导致问题。
(正确的顺序从右到左) 翻译*旋转*比例
您的错误听起来像这里解释的那样:
您将船翻译为(10,0,0)。它的中心现在有10个单位。 你将你的船缩放2.每个坐标相对于原点乘以2,这是很远的...所以你最终得到一个大的 船,但以2 * 10 = 20为中心。这是你不想要的。
http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/