Android / OpenGles绘制2个外部纹理,每个占据一半的屏幕。左右一半

Ho Wei Lip

我已成功将2个外部OES纹理绑定到我的着色器。现在,我希望每个纹理占用屏幕的1/2(左为一个纹理,右为另一个纹理)。我该怎么做呢?例如:http : //vicceskep.hu/kepek/vicces_funny_007445.jpg来自Google的随机图片

显示每张图片的完整图片。有一个有效的方法来做会很好。我当前从中引用的代码是来自github的bikflake / grafika代码。请访问http://bigflake.com/mediacodec/CameraToMpegTest.java.txt以检查代码。

好的,我认为我将对问题进行更深入的说明,因为我对开放式GL中的3d投影了解不多。抱歉,该问题上的大量修改。这是我目前的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);
Ho Wei Lip

是的,我终于明白了。我使用2个不同的程序进行绘制,并使用mTriangleVerticesData编辑图像比例并使用gl_position来移动图像。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Android约束布局中使recyclerView占据屏幕的一半(最大)?

在Android中摆脱一半的String

在android studio中将表格设置为屏幕高度的一半

占据屏幕一半的tabView

如何在android中的另一个imageview上将imageview一半重叠

Android 显示一半 TextView 和一半 ImageView 如果为真否则只显示 TextView

自动调整2个窗口大小以占据屏幕一半的方式

HTML / CSS:图像占据屏幕的一半

使用relativelayout使textview占据屏幕宽度的一半

android-如何在Android布局中添加文本与图像完全相同的一半?

如何在Android约束布局中将图像重叠一半

如何显示在Android中使用矩阵旋转的ImageView的一半?

使一半的UIView离开屏幕

我的一半屏幕无法使用

iframe 被屏幕截了一半

如何将 Android ListView 的单元格高度设置为单元格宽度的一半?

当我想在列表中添加名称时(SQLite)Android,我的文字可见一半

有两个项目,每个项目占屏幕宽度的一半

如何在xml布局中添加两个Scroll视图,以使每个scrollview占据布局高度的一半?

是否有键盘快捷键可以使窗口占据整个屏幕的一半?

Windows 8.1从上到下拖动使桌面变小,仅占据一半的屏幕

在自动布局中,无论方向如何,视图如何占据屏幕的一半?

100%的宽度仅占据手机或笔记本电脑屏幕的一半

使图像出现在屏幕的一半,另一半滚动以查看

如何使用下一页标题显示一半来实现自定义布局,以指示下一页的用户,如android所示

抽头禁用左右一半/部分滑动

了解一半甚至一半?

一半侏儒一半团结13.10

DirectX11 / OpenGL仅渲染一半的纹理