2015-05-22 19 views
2

Я пытаюсь нарисовать текстуру на треугольной сетке. Я получаю сетку, но не картинку на ней. См. Рисунок ниже. Как вы можете видеть, это простой треугольник, но текстуры нет.рисовать текстуру на треугольной сетке

enter image description here

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")); 

И в моем методе визуализации:

@Override 
public void render() { 

    Gdx.gl.glClearColor(0, 0, 0, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    Gdx.gl.glEnable(GL20.GL_TEXTURE_2D); 
    texture.bind(); 

    shader.begin(); 

    shader.setUniformMatrix("u_worldView", viewport.getCamera().combined); 
    shader.setUniformi("u_texture", 0); 

    mesh.render(shader, GL20.GL_TRIANGLES); 

    shader.end();  

} 
+0

Думаю, вам просто нужно добавить несколько строк. Я оставляю ссылку, несколько примеров, но наиболее похожую на то, что вы хотите, находится в нижней части страницы, я надеюсь помочь http://www.gamefromscratch.com/post/2014/07/08/ LibGDX-учебник-Part-12-Using-GLSL-шейдеры-и-создание-а-Mesh.aspx –

ответ

1

Ok Я установил ее, изменив свой шейдер

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

Теперь он рисует текстуры внутри сетки.

Смежные вопросы