Несмотря на то, что вы работаете на Android, я создал пример приложения для iPhone, которое делает это для входящих видеокадров. Вы можете скачать код для этого примера с здесь .У меня есть запись об этом приложении, которое выполняет отслеживание объектов на основе цвета с использованием живого видео, которое вы можете прочитать здесь .
В этом приложении я рисую два треугольника, чтобы сгенерировать прямоугольник,затем текстуру, используя следующие координаты:
static const GLfloat squareVertices[] = {
-1.0f, -1.0f,
1.0f, -1.0f,
-1.0f, 1.0f,
1.0f, 1.0f,
};
static const GLfloat textureVertices[] = {
1.0f, 1.0f,
1.0f, 0.0f,
0.0f, 1.0f,
0.0f, 0.0f,
};
Чтобы пройти через видеокадр как текстуру, я использую простую программу со следующим вершинным шейдером:
attribute vec4 position;
attribute vec4 inputTextureCoordinate;
varying vec2 textureCoordinate;
void main()
{
gl_Position = position;
textureCoordinate = inputTextureCoordinate.xy;
}
и следующиеФрагмент шейдера:
varying highp vec2 textureCoordinate;
uniform sampler2D videoFrame;
void main()
{
gl_FragColor = texture2D(videoFrame, textureCoordinate);
}
Рисование - это простое использование правильной программы:
glUseProgram(directDisplayProgram);
настройка формы текстуры:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, videoFrameTexture);
glUniform1i(uniforms[UNIFORM_VIDEOFRAME], 0);
установка атрибутов:
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices);
glEnableVertexAttribArray(ATTRIB_VERTEX);
glVertexAttribPointer(ATTRIB_TEXTUREPOSITON, 2, GL_FLOAT, 0, 0, textureVertices);
glEnableVertexAttribArray(ATTRIB_TEXTUREPOSITON);
и затем рисуем треугольники:
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);