2014-09-28 7 views
0

libgdx에서 쉐이더가로드되었고 스테이지 객체가 쉐이더를 사용하여 그릴 수 있도록하려고합니다. SpriteBatch의 셰이더를 셰이더에 설정하고 스테이지의 스프라이트 배치를 설정하려고했으나 검정색 화면으로 표시됩니다. 스테이지의 Libgdx 셰이더?

ShaderProgram shader = new ShaderProgram(Gdx.files.internal("shader.vert"), Gdx.files.internal("shader.frag")); 
SpriteBatch batch = new SpriteBatch(); 
batch.setShader(shader); 
Stage stage = new Stage(new StretchViewport(768, 576), batch); 
... 
stage.act(); 
shader.begin(); 
stage.draw(); 
shader.end(); 

내 쉐이더

의 모양 :이 작동하지 않는 이유는

shader.vert을

attribute vec4 a_position; 
attribute vec4 a_color; 
attribute vec2 a_texCoord; 

uniform mat4 u_projTrans; 

varying vec4 v_color; 
varying vec2 v_texCoords; 

void main() 
{ 
    v_color = a_color; 
    v_color.a = v_color.a * (256.0/255.0); 
    v_texCoords = a_texCoord + 0; 
    gl_Position = u_projTrans * a_position; 
} 

shader.frag

단지 하나 일 것으로 보인다
#ifdef GL_ES 
#define LOWP lowp 
    precision mediump float; 
#else 
#define LOWP 
#endif 

varying LOWP vec4 v_color; 
varying vec2 v_texCoords; 

uniform sampler2D u_texture; 

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

조직. 다른 모든 텍스처는 렌더링되지 않습니다. 또한 텍스처 파워를 2로 설정해도 효과가 없습니다.

답변

0

SpriteBatch에는 특정 예상 특성 이름이 있습니다. a_texCoord을 사용하고 있지만 a_texCoord0을 예상하므로 쉐이더는 모든 UV를 0,0처럼 처리합니다.

셰이더를 SpriteBatch 및 스테이지의 SpriteBatch에 설정하는 것에 대해 언급했지만 코드에서는 동일하고 동일합니다.

셰이더에서 beginend을 호출 할 필요가 없습니다. SpriteBatch (따라서 스테이지)가 자동으로이 작업을 수행하기 때문입니다. 그게 문제를 일으킬 수 있는지 확실하지 않습니다.

내가 한 짓이 왜 텍스처 중 하나를 사용했는지 설명 할 수 없습니다. 나는 텍스처의 왼쪽 아래 픽셀과 같은 색으로 모든 것을 그릴 것이라고 기대합니다.

다른 문제가 발생할 수 있지만 자신의 셰이더를 삽입하기 전에 올바르게 그렸다고 가정합니다.

+0

먼저 내 코드는 내가 언급 한 것과 동일하지만 잘못 입력 한 것 같습니다. 시작과 끝은 내가 그들을 제거했을 때 어떤 차이도 만들지 않았다. 그러나 나는 그것을 a_texCoord0으로 변경하려고 시도 할 것이다. – name

+0

'a_texCoord'를'a_texCoord0'으로 바꾸는 것이 트릭을 만들었다. 그 이유는 모르겠지만 제가 사용한 튜토리얼은 그걸 그대로 두었 습니다만, 지금은 감사합니다. – name

관련 문제