в настоящее время я масштабирование матрицы следующим образом:Масштаб матрицы вместо
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);
Теперь я могу масштабировать свой объект правильно, но единственная проблема в том, что каждый раз, когда я масштабировать матрицу, объект перемещается немного. Мне было интересно, как я могу масштабировать матрицу, сохраняя центральную точку и не переставляя объект. Кто-нибудь знает, как я могу это сделать в OpenGL ES 2.0 на Android? Спасибо
Из показанного кода я могу только догадываться: вы держите матрицы для перемещения, поворота и масштабирования отдельный? Если нет, вы можете масштабировать уже преобразованный объект/матрицу – Felk
В настоящее время у меня есть только модельМатрица, которую я сначала переводил, а затем масштабировал ее несколько раз. – TameHog
Масштабирование относительно начала координат. Обычно вы сначала масштабируетесь (относительно пространства объекта), а затем переводите. Если вы хотите изменить масштабирование, вам нужно создать новую модельMatrix, а не умножаться на текущую, а затем применить все снова. – Felk