2013-10-08 7 views
6

메쉬에 텍스처를 넣으려고했지만 실패했습니다. something like this, where texture can be seen을 렌더링하려하지만 this을 얻을 수 있습니다. 삼각형을 거의 볼 수 없습니다.메쉬의 텍스처가 올바르게 렌더링되지 않습니다. 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() {} 

Vertexshader 은 다음과 같습니다 :

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

답변

4

하는 정정 해줘 다음 코드를 실행하고 유니폼을 입은 부분이 없어 졌나요?

예를 들어 다음을 참조하십시오. OpenGlShader

관련 문제