Применяете ортогональную проекцию или усеченный конус, воздействуя на нормализованные координаты
Я знаю, что нормализованные координаты должны быть -1 (слева) и +1 (справа) и -1 (снизу) и +1 (вверху)
как это:
Но после применения этого:
Из моего метода onSurfaceChanged
GLES20.glViewport(0, 0, width, height);
float ratio = (float) width / height;
Matrix.orthoM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
//The above line can be replaced with:
//Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
//But I get the same results with either frustumM or otrhoM
И это в моем методе onDrawFrame
Matrix.setLookAtM(mVMatrix, 0, 0, 0, 3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);
(Затем я передаю mMVPMatrix в метод рисования моего пользовательского класса, где он вращается и переводится).
Но мои координаты, похоже, меняются - примерно так и происходит:
Как видите, координаты x несколько изменены, -1 и +1 больше не являются краями экрана (на устройстве, которое я сейчас использую, внешние края становятся -1.7 и +1.7)
Координаты Y остаются без изменений.
Был бы признателен, если бы кто-то мог указать, где я иду не так? Мне нужно, чтобы оно было от -1 до +1, как и должно быть.
Спасибо
1 ответ
На мой взгляд это кажется правильным. Если ваш экран не квадратный, то вы уверены, что хотите, чтобы ось x была растянута, чтобы она работала как квадратный экран? Потому что, если вы сделаете это, то если вы скажете OpenGL нарисовать квадрат, он будет отображаться в виде прямоугольника на экране, если у вас не будет краев оси x больше, чем краев оси y, когда ширина экрана шире, чем ваша высота экрана, как показано на рисунке. Вот почему вы передаете свой ratio
в проекции, поэтому он знает, как правильно рисовать вещи.
Что происходит, когда вы рисуете обычный квадрат на экране? Это выглядит как квадрат или прямоугольник?