2013-08-04 2 views
0

Libgdx에서 스테이지와 함께 텍스처 메쉬를 렌더링하려고합니다. 을 mesh.render() 위에 올릴 때 문제 렌더링 텍스처가 있습니다.스테이지와 함께 Libgdx 메쉬 렌더링

사례 1 : 위의 경우

public void render(float delta) { 
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
    Gdx.gl.glEnable(GL10.GL_TEXTURE_2D); 

    stage.act(delta); 
    stage.draw(); 
    texture.bind(); 
    mesh.render(GL10.GL_TRIANGLES, 0, 3); 

} 

// -- This is in my create method: 
     mesh = new Mesh(true, 3, 3, 
       new VertexAttribute(Usage.Position, 3, "a_position"), 
       new VertexAttribute(Usage.ColorPacked, 4, "a_color"), 
       new VertexAttribute(Usage.TextureCoordinates, 2, "a_texCoords")); 

     mesh.setVertices(new float[] { 50, 50, 0,Color.toFloatBits(255, 0, 0, 255),0,1, 
             50, 500, 0,Color.toFloatBits(0, 255, 0, 255),0,0, 
             500, 50, 0, Color.toFloatBits(0, 0, 255, 255),1,1             }); 

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

나는 텍스처를 렌더링 할 수 있지만, 그라데이션 삼각형을 렌더링 할 수 없습니다입니다.

사례 2 :이 경우

public void render(float delta) { 
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
    Gdx.gl.glEnable(GL10.GL_TEXTURE_2D); 

    texture.bind(); 
    mesh.render(GL10.GL_TRIANGLES, 0, 3); 
    stage.act(delta); 
    stage.draw(); 
} 

내가 삼각형에 제대로 텍스처를 렌더링 할 수 있어요.

내 질문 :stage.draw()의 순서를 수행하고 난 삼각형을 그릴 수 있지만 mesh.render()이 질감에 영향을 미치는 이유는

  1. .
  2. 액터의 draw 메서드로 텍스처로 메쉬를 그려 넣으려면 어떻게해야합니까?

답변

2

OpenGL은 "상태 저장"라이브러리입니다 (따라서 OpenGL로 변경된 내용은 다시 변경 될 때까지 유지됩니다). 따라서 stage.draw() 호출의 일부는 메쉬의 텍스처가 작동하지 않는 OpenGL 상태를 변경합니다.

texture.bind(); 
mesh.render(GL10.GL_TRIANGLES, 0, 3); 

내가 무대 텍스처링을 해제 활성화 것이라고 생각하지 못했지만, 그것은 수도 다음과 같습니다 당신과 함께

Gdx.gl.glEnable(GL10.GL_TEXTURE_2D); 

전화를 아래로 :

당신은 이동 시도 할 수 있습니다. 당신이 배우의 draw 콜백 내에서 직접 메쉬 그릴하려는 경우

또한, 당신은 endbatch 필요하고 비 배치 도면을 주변에 다시 시작될 수 있습니다. 배치 구성은 OpenGL 상태에 대한 가정을 beginend 호출 사이에서 가정하므로 상태를 변경하면 혼란 스러울 수 있습니다. 관련된 예는 libgdx - ShapeRenderer in Group.draw renders in wrong colour을 참조하십시오.

+0

고맙습니다. 무대처럼 보이는 것은 로직의 어딘가에 텍스처 바인딩을 사용하지 못하게합니다. – alexb

0

임 죄송합니다, 이것은 단지 추측 : 추가하려고

도면 메쉬 무대 사이
Gdx.gl10.glActiveTexture(GL10.GL_TEXTURE0); 

, 또는 후, 또는 내가 쉐이더를 사용하고 싶었 비슷한 문제가 있었다 전에 ... 및 BitmapFonts

+0

Libgdx'texture.bind()'호출은이를 수행해야합니다. –

관련 문제