在openGl android(Wear)中绘制基于图像的纹理

Posted

技术标签:

【中文标题】在openGl android(Wear)中绘制基于图像的纹理【英文标题】:Draw an Image based texture in openGl android(Wear) 【发布时间】:2016-01-26 05:26:53 【问题描述】:

我正在使用 android 中的 opengl 绘制基于图像的纹理,但图像仅部分绘制如下所示

我的编码

 @Override
    public void onGlContextCreated() 
        super.onGlContextCreated();
        shaders = new ShadersDla();
        float[] vts =  // x, y, s, t.
                -1, 1, 1, 1, -1, 1, 0, 0, 1, -1, 1, 1, 1, 1, 1, 0

        ;
        // AllocateDirect prevents the GC moving this memory.
        vtBuffer = ByteBuffer.allocateDirect(vts.length * 4)
                .order(ByteOrder.nativeOrder())
                .asFloatBuffer();
        vtBuffer.put(vts);
      
 @Override
    public void onGlSurfaceCreated(int width, int height) 
        super.onGlSurfaceCreated(width, height);
        float aspectRatio = (float) width / height;
 float dist = .001f;
        Matrix.frustumM(projectionMatrix, 0,
                -aspectRatio * dist, aspectRatio * dist, // Left, right.
                -dist, dist, // Bottom, top.
                dist, 100); // Near, far.
   makeTexture();
    

着色器

private static final String VERTEX_SHADER =
        // Pass in the modelview matrix as a constant.
        "uniform mat4 u_mvpMatrix;  \n"
                // Pass in the position and texture coordinates per vertex.
                + "attribute vec4 a_position;  \n"
                + "attribute vec2 a_texCoord;  \n"
                // Varyings are sent on to the fragment shader.
                + "varying vec2 v_texCoord;  \n"
+ "void main()   \n"
                // Transform the vertex coordinate into clip coordinates.
                + "  gl_Position = u_mvpMatrix * a_position;  \n"
                // Pass through the texture coordinate.
                + "  v_texCoord = a_texCoord;  \n"
                + "  \n";

需要一些帮助来做这件事。请指导我一个简单的方法,我是 android 和 opengl 的新手......

【问题讨论】:

那么你有多少个顶点?您是否在查看具有四边形的 OpenGL 示例与具有三角形的 OpenGL ES? 前两个顶点具有相同的 x/y 坐标。纹理坐标看起来也很可疑,两个顶点(第一个和第三个)具有相同的纹理坐标。 可以给我一些样本或任何对纹理坐标有更多解释的链接,作为 android openGl 的新手 这是一个老问题,在解释纹理坐标时得到了高票:***.com/questions/5532595/…。 得到了答案,我改变了纹理坐标,谢谢@Reto Koradi 【参考方案1】:

改变纹理坐标为

 -1.0f, 1.0f, 0,0 ,
 1.0f, 1.0f, 1,0, 
-1.0f,-1.0f, 0,1 ,
1.0f, -1.0f, 1,1 

【讨论】:

以上是关于在openGl android(Wear)中绘制基于图像的纹理的主要内容,如果未能解决你的问题,请参考以下文章

android openGL ES2 一切从绘制纹理開始

Android - 在相机顶部绘制 OpenGL 图像

Android - 使用 openGL ES 绘制 3D 然后 2D

在 Android(和 iOS)上使用 Qt 使用 openGL 绘制具有 3d 效果的 2d 线

Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

如何在Android上使用OpenGL ES 2.0绘制点