【发布时间】:2012-10-23 10:22:13
【问题描述】:
我正在尝试通过传输到 OpenGL ES 2.0 着色器的 SurfaceTexture 在 GLSurfaceView 中显示相机流。
我从这个post中获得灵感。
图像完整,但在我的平板电脑上显示不正确。 屏幕似乎分为 2x2 部分。图像显示在左上角,而其他三个部分是黑色的。
我怀疑问题出在我使用了here记录的序列返回的转换矩阵
updateTexImage();
getTransformMatrix(...);
我在顶点着色器中传输这个矩阵来为片段着色器生成纹理坐标。
顶点着色器:
attribute vec3 aPosition;
uniform mat4 uMvpTransform;
// Matrix retrieved by getTransformMatrix(...);
uniform mat4 uTexMatTransform;
varying vec2 vTexCoord;
void main(void)
{
gl_Position = uMvpTransform *vec4(aPosition.xyz, 1);
vec4 l_tex = uTexMatTransform*vec4(aPosition.xyz, 1);
vTexCoord=l_tex.xy;
}
片段着色器:
#extension GL_OES_EGL_image_external : require
varying mediump vec2 vTexCoord;
uniform samplerExternalOES uSampler;
void main(void)
{
mediump vec4 l_tex = texture2D(uSampler, vTexCoord);
gl_FragColor=l_tex;
}
纹理附加到以下正方形:
// Image container
GLfloat l_vertices[] = {
-1.0f, 1.0f, 0.0f,
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
1.0f, 1.0f, 0.0f };
有人做过类似的事情吗?
2012 年 11 月 3 日编辑:
顶点着色器的修正:
attribute vec3 aPosition;
attribute vec2 aTexCoord;
uniform mat4 uMvpTransform;
// Matrix retrieved by getTransformMatrix(...);
uniform mat4 uTexMatTransform;
varying vec2 vTexCoord;
void main(void)
{
gl_Position = uMvpTransform *vec4(aPosition.xyz, 1);
vec4 l_tex = uTexMatTransform*vec4(aTexCoord.xy,0, 1);
vTexCoord=l_tex.xy;
}
与:
// Texture
GLfloat l_texCoord[] = {
0.0f, 1.0f,
0.0f, 0.0f,
1.0f, 0.0f,
1.0f, 1.0f
};
【问题讨论】:
标签: android opengl-es android-camera