在三角形网格上绘制纹理

时间:2015-05-22 21:41:34

标签: libgdx mesh

我正在尝试在三角形网格上绘制纹理。我得到网格而不是它上面的图片。见下图。你可以看到它是一个普通的三角形,但没有纹理。

enter image description here

output

在我的渲染方法中:

    String vertexShader = "attribute vec4 a_position;    \n" + 
            "attribute vec4 a_color;\n" +
            "attribute vec2 a_texCoord0;\n" + 
            "uniform mat4 u_worldView;\n" + 
            "varying vec4 v_color;" + 
            "varying vec2 v_texCoords;" + 
            "void main()                  \n" + 
            "{                            \n" + 
            "   v_color = vec4(1, 1, 1, 1); \n" + 
            "   v_texCoords = a_texCoord0; \n" + 
            "   gl_Position =  u_worldView * a_position;  \n"      + 
            "}                            \n" ;


            String fragmentShader = "#ifdef GL_ES\n" +
              "precision mediump float;\n" + 
              "#endif\n" + 
              "varying vec4 v_color;\n" + 
              "varying vec2 v_texCoords;\n" + 
              "uniform sampler2D u_texture;\n" + 
              "void main()                                  \n" + 
              "{                                            \n" + 
              "  gl_FragColor = v_color * texture2D(u_texture, v_texCoords);\n" +
              "}";


      shader = new ShaderProgram(vertexShader, fragmentShader);

     if (shader.isCompiled() == false) {
         Gdx.app.log("ShaderError", shader.getLog());
         System.exit(0);
      }

        mesh = new Mesh(true, 3, 3, 
                new VertexAttribute(Usage.Position, 3, ShaderProgram.POSITION_ATTRIBUTE),
                new VertexAttribute(Usage.Color, 4, ShaderProgram.COLOR_ATTRIBUTE),
                new VertexAttribute(Usage.TextureCoordinates, 2, ShaderProgram.TEXCOORD_ATTRIBUTE));

       mesh.setVertices(new float[] { -0.5f, -0.5f, 0, 0.2f, 0.3f, 0.4f, 1f, 0, 1,
                                       0.5f, -0.5f, 0, 0.1f, 0.2f, 0.1f, 1f, 1, 1,
                                       0, 0.5f, 0, 0, 0.4f, 0.5f, 0.5f, 1f, 0 });

        mesh.setIndices(new short[] { 0, 1, 2 });


     texture = new Texture(Gdx.files.internal("data/caveman.png"));

1 个答案:

答案 0 :(得分:1)

好的我通过将着色器更改为

来修复它
      String vertexShader = 
            "attribute vec4 a_position;\n" + 
            "attribute vec4 a_color;\n" +
            "attribute vec2 a_texCoord;\n" + 
            "uniform mat4 u_worldView;\n" + 
            "varying vec4 v_color;\n" + 
            "varying vec2 v_texCoords;\n" +  
            "void main()\n" + 
            "{\n" + 
            "   v_color =  vec4(1, 1, 1, 1);\n" + 
            "   v_texCoords = a_texCoord;\n" + 
            "   gl_Position =  u_worldView * a_position;\n" + 
            "}\n" ;

            String fragmentShader = 
              "#ifdef GL_ES\n" +
              "precision mediump float;\n" + 
              "#endif\n" + 
              "varying vec4 v_color;\n" + 
              "varying vec2 v_texCoords;\n" + 
              "uniform sampler2D u_texture;\n" + 
              "void main()\n" + 
              "{\n" + 
                 "vec4 texColor = texture2D(u_texture, v_texCoords);\n" +
                " gl_FragColor = texColor;\n" +
              "}";

现在它在网格内绘制纹理。