Я успешно привязываю 2 внешних OES-текстуры к моему шейдеру. Теперь я хочу, чтобы каждая текстура занимала 1/2 экрана (слева для одной текстуры справа для другого). Как мне это сделать? Пример: http://vicceskep.hu/kepek/vicces_funny_007445.jpg случайное изображение из googleAndroid/OpenGles рисует 2 внешних текстуры, каждая из которых занимает половину экрана. Левая и правая половина
Отображение полного изображения каждого изображения. Хорошо бы иметь эффективный метод для этого. Код, на который я ссылаюсь сейчас, - это код bikflake/grafika от github. Посетить http://bigflake.com/mediacodec/CameraToMpegTest.java.txt Чтобы проверить код.
Хорошо, я думаю, что действительно дам подробное разъяснение для моего вопроса, поскольку у меня нет большого знания о 3D проекциях в открытом GL. Извините за многочисленные изменения в вопросе. Это мой Vertex Shader код в настоящее время
private static final String VERTEX_SHADER =
// UMVPMATRIX IS AN IDENTITY MATRIX
"uniform mat4 uMVPMatrix;\n" +
//These are surfacetexture.getTransformationMatrix
"uniform mat4 uSTMatrixOne;\n" +
"uniform mat4 uSTMatrixTwo;\n" +
"attribute vec4 aPosition;\n" +
"attribute vec4 aTextureCoord;\n" +
"varying vec2 vTextureCoord;\n" +
"varying vec2 vTextureCoordTwo;\n" +
"void main() {\n" +
" gl_Position = uMVPMatrix * aPosition;\n" +
" vTextureCoord = (uSTMatrix * aTextureCoord).xy;\n" +
" vTextureCoordTwo = (uSTMatrixTwo* aTextureCoord).xy ;\n" +
"}\n";
Это мой фрагмент кода шейдера в данный момент, который делает накладку в настоящее время.
private static final String FRAGMENT_SHADER =
"#extension GL_OES_EGL_image_external : require\n" +
"precision mediump float;\n" + // highp here doesn't seem to matter
"varying vec2 vTextureCoord;\n" +
"varying vec2 vTextureCoordTwo;\n" +
"uniform samplerExternalOES sTextureOne;\n" +
"uniform samplerExternalOES sTextureTwo;\n" +
"void main() {\n" +
" lowp vec4 pixelTop = texture2D(sTextureOne, vTextureCoord);\n" +
" lowp vec4 pixelBot = texture2D(sTextureTwo, vTextureCoordTwo);" +
" gl_FragColor = pixelTop + pixelBot;\n" +
"}\n";
Что касается aPosition и координаты текстуры, на которую в данный момент ссылаются. Было бы неплохо, если бы кто-то объяснил, как работает mTraingleVerticesData.
private final float[] mTriangleVerticesData = {
// X, Y, Z, U, V
-1.0f, -1.0f, 0, 0.f, 0.f,
1.0f, -1.0f, 0, 1.f, 0.f,
-1.0f, 1.0f, 0, 0.f, 1.f,
1.0f, 1.0f, 0, 1.f, 1.f,
};
GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT, false,
TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);
checkGlError("glVertexAttribPointer maPosition");
GLES20.glEnableVertexAttribArray(maPositionHandle);
checkGlError("glEnableVertexAttribArray maPositionHandle");
mTriangleVertices.position(TRIANGLE_VERTICES_DATA_UV_OFFSET);
GLES20.glVertexAttribPointer(maTextureHandle, 2, GLES20.GL_FLOAT, false,
TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);
Моя 2 внешняя проекция связывания в настоящее время
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, mTextureID);
//Cam Code
//Set texture to be active
GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, mTwoTextureID);
http://bigflake.com/mediacodec/CameraToMpegTest.java.txt Это то, что я ссылаюсь на –