2013-10-08 14 views
6

Tôi đang cố gắng đặt họa tiết lên lưới, nhưng không thành công. Tôi đang cố gắng hiển thị something like this, where texture can be seen nhưng tôi nhận được this, nơi tôi hầu như không thể thấy hình tam giác. Tôi đang chạy đoạn mã sau:Kết cấu trên lưới không hiển thị chính xác 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() {} 

Các Vertexshader là:

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

Trả lời

4

Đúng tôi nếu tôi sai, nhưng không phải là bạn thiếu phần mà bạn đặt đồng phục của bạn?

Xem ví dụ sau: OpenGlShader

Các vấn đề liên quan