gpt4 book ai didi

android - 通过 SurfaceTexture 在 GLSurfaceView 上显示相机流

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:54:45 25 4
gpt4 key购买 nike

我正在尝试通过传输到 OpenGL ES 2.0 着色器的 SurfaceTexture 在 GLSurfaceView 中显示相机流。

我从这个 post 中得到灵感.

图像是完整的,但在我的平板电脑上显示不正确。屏幕似乎分为 2x2 部分。图片显示在左上角,其他三部分为黑色。

我怀疑问题出在我对 here 记录的序列返回的转换矩阵的使用上

updateTexImage();
getTransformMatrix(...);

我在顶点着色器中传输这个矩阵以生成 fragment 着色器的纹理坐标。

顶点着色器:

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;
}

fragment 着色器:

#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

};

最佳答案

我已成功使用 SurfaceTexture 在自定义 opengl 纹理上绘制相机帧,而无需使用 android 提供的转换矩阵。

只需尝试按照普通纹理绘制的方式来定义索引顶点和纹理。例如这样。

const GLfloat Vertices[] = {0.5, -0.5, 0,
0.5, 0.5, 0,
-0.5, 0.5, 0,
-0.5, -0.5, 0};

const GLubyte Indices[] = { 0, 1, 2,
2, 3, 0 };

const GLfloat Textures[] = { 1.,0.,
0.,0.,
0.,1.,
1.,1. };

您应该能够像使用普通纹理一样使用表面纹理。

如果您想执行某种 3D 投影,这是一个 good post关于如何生成合适的 MVP 矩阵。您可以使用它与顶点着色器中的位置相乘。

关于android - 通过 SurfaceTexture 在 GLSurfaceView 上显示相机流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13200652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com