Mặc dù bạn đang sử dụng Android, tôi đã tạo ra một ứng dụng mẫu iPhone thực hiện điều này cho các khung hình của video. Bạn có thể tải xuống mã cho mẫu này từ here. Tôi có một bản viết về ứng dụng này, theo dõi đối tượng dựa trên màu sắc bằng cách sử dụng video trực tiếp, mà bạn có thể đọc here.
Trong ứng dụng này, tôi vẽ hai tam giác để tạo ra một hình chữ nhật, sau đó tạo họa tiết cho rằng việc sử dụng các tọa độ sau đây:
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,
};
Để đi qua khung video như là một kết cấu, tôi sử dụng một chương trình đơn giản như sau vertex:
attribute vec4 position;
attribute vec4 inputTextureCoordinate;
varying vec2 textureCoordinate;
void main()
{
gl_Position = position;
textureCoordinate = inputTextureCoordinate.xy;
}
và shader đoạn sau đây:
varying highp vec2 textureCoordinate;
uniform sampler2D videoFrame;
void main()
{
gl_FragColor = texture2D(videoFrame, textureCoordinate);
}
Vẽ là một vấn đề đơn giản của việc sử dụng chương trình ngay:
glUseProgram(directDisplayProgram);
thiết lập đồng bộ kết cấu:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, videoFrameTexture);
glUniform1i(uniforms[UNIFORM_VIDEOFRAME], 0);
thiết lập các thuộc tính:
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices);
glEnableVertexAttribArray(ATTRIB_VERTEX);
glVertexAttribPointer(ATTRIB_TEXTUREPOSITON, 2, GL_FLOAT, 0, 0, textureVertices);
glEnableVertexAttribArray(ATTRIB_TEXTUREPOSITON);
và sau đó vẽ hình tam giác:
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
Hãy nhớ rằng bạn cần phải thay đổi chỉ mục thuộc tính - điều này được thực hiện trong chương trình mẫu của bạn, nhưng không phải trong bài đăng. '// Chỉ mục thuộc tính. enum { ATTRIB_VERTEX, ATTRIB_COLOR, ATTRIB_TEXTUREPOSITON, NUM_ATTRIBUTES }; ' – appas
Ý anh là gì bởi @dep đó? – kevlar
ứng dụng của bạn cần một số cập nhật. Có một số chức năng không được chấp nhận và nó bị lỗi trên ios 8. Nhưng tôi thích nó :-) – Karsten