【发布时间】:2015-03-19 22:17:47
【问题描述】:
目前我正在像这样缩放矩阵:
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 中做到这一点?谢谢
【问题讨论】:
-
从显示的代码中我只能猜测:您是否将平移、旋转和缩放的矩阵分开?如果没有,您只能缩放已经转换的对象/矩阵
-
目前我只有modelMatrix,我先翻译然后多次缩放
-
缩放是相对于原点的。您通常首先缩放(相对于对象的空间)然后平移。如果要更改缩放比例,则需要新建一个modelMatrix,而不是乘以当前的,然后再次应用所有内容。
-
我只翻译一次,我希望对象原点在哪里
-
@Felk 即使我将模型矩阵设置为恒等然后缩放,对象仍然会平移
标签: java android matrix opengl-es scale