2013-10-08 12 views
6

Ich versuche, eine Textur auf ein Netz zu setzen, aber scheitern. Ich versuche something like this, where texture can be seen zu rendern, aber ich bekomme this, wo ich das Dreieck kaum sehen kann. Ich verwende den folgenden Code:Textur auf einem Netz nicht richtig gerendert Libgdx

public class Game implements ApplicationListener{ 

Mesh mesh; 
ShaderProgram shader; 
Texture texture; 

public static void main(String[] args) { 
    LwjglApplication app = new LwjglApplication(new Game(), "Mesh Tutorial 1", 800, 600, true); 
} 

protected static ShaderProgram createMeshShader() { 

    String vert = Gdx.files.internal("data/VertexShader.txt").readString(); 
    String frag = Gdx.files.internal("data/FragmentShader.txt").readString(); 

    ShaderProgram.pedantic = false; 
    ShaderProgram shader = new ShaderProgram(vert, frag); 
    return shader; 
} 

@Override 
public void create() { 


    if (mesh == null) { 
     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/badlogic.png")); 
    } 
    shader = createMeshShader(); 
} 

@Override 
public void render() { 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    Gdx.gl.glEnable(GL20.GL_TEXTURE_2D); 
    texture.bind(); 
    mesh.render(shader, GL20.GL_TRIANGLES); 
} 
@Override 
public void resize(int width, int height) {} 
@Override 
public void pause() {} 
@Override 
public void resume() {} 
@Override 
public void dispose() {} 

Die Vertexshader ist:

attribute vec4 a_position; 
attribute vec4 a_color; 
attribute vec2 a_texCoords; 
uniform mat4 u_projTrans; 

varying vec4 vColor; 
varying vec2 vTexCoord; 
void main() { 
    vColor = a_color; 
    vTexCoord = a_texCoords; 
    gl_Position = u_projTrans * a_position; 
} 

Fragmentshader:

#ifdef GL_ES 
precision mediump float; 
#endif 

varying vec4 v_color; 
varying vec2 v_texCoords; 
uniform sampler2D u_texture; 

void main(){ 
    vec4 texColor = texture2D(u_texture, v_texCoords); 
    gl_FragColor = v_color * texColor; 
} 

Antwort

4

mich korrigieren, wenn ich falsch bin, aber nicht wahr fehlt der Teil, wo Sie Ihre Uniformen setzen?

Siehe das folgende als Beispiel: OpenGlShader

Verwandte Themen