Следуя за android OpenGL ES tutorial, я могу нарисовать квадрат к экрану.Как рисовать два квадрата рядом?
Я хотел бы нарисовать второй квадрат на экране, рядом с начальной площади, так что я сделал следующим образом (только дважды):
Matrix.setLookAtM(mViewMatrix, 0, 0, 0, 3.0f, 0, 0, 0, 0, 1.0f, 0);
float[] modelMatrix = new float[16];
Matrix.setIdentityM(modelMatrix, 0);
Matrix.translateM(modelMatrix, 0, 2, 2, 0); //arbitrarily picking 2, the correctly drawn square uses 0's.
Matrix.multiplyMM(mMVPMatrix, 0, mViewMatrix, 0, modelMatrix, 0)
Matrix.multiplyMM(mMVPMatrix, 0, mMVPMatrix, 0, mProjMatrix, 0);
, а затем продолжить рисовать его (link to google's code)
а именно:
private final String vertexShaderCode =
"uniform mat4 uMVPMatrix;" +
"attribute vec4 vPosition;" +
"void main() {" +
" gl_Position = vPosition * uMVPMatrix;" +
"}";
и
GLES20.glViewport(0, 0, width, height);
float ratio = (float) width/height;
Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
Однако мой второй квадрат перекос так:
Почему это так? Как я могу просто нарисовать квадрат рядом с этим, не изменяя начальные координаты?
Мое подозрение, что это имеет какое-то отношение к Matrix.setLookAtM(), и что проекция преобразует квадрат. Я не уверен, как это сделать.
Второй «multiplyMM» выглядит неправильно. Кодирование умножения 'VMP', где должно быть' PVM'; переключите аргументы. –
@StefanHanke Я переключил второй аргумент на: 'Matrix.multiplyMM (mMVPMatrix, 0, mProjMatrix, 0, mMVPMatrix, 0);' но теперь я получаю более крупную версию того же самого. Есть идеи? Это аргументы, которые вы хотели переключить? – cnorris
Да. Ну, тогда попробуйте добрые старые printf-отладки - MVP-матрицу для шейдера, какие данные действительно отправлены и т. Д. Включен ли Z-буфер? –