LibGDX에서 투명도로 PNG를 렌더링하려면 어떻게합니까?


12

LibGDX를 사용하여 간단한 틱택 토 예제를 작성 중입니다. 십자형, 원형 ​​및 보드, png투명 배경의 김프로 만든 모든 이미지가 있습니다.

Texture투명도 로 렌더링하려면 어떻게해야 합니까?

GL10 활성화 기능을 사용해 보았지만 작동하지 않는 것 같습니다.


이것을 코드에 넣었습니까? Gdx.gl.glClearColor (1, 1, 1, 1); Gdx.gl.glClear (GL10.GL_COLOR_BUFFER_BIT);
LeSam

렌더 루프에 추가
LeSam

잘 작동해야합니다 (나를 위해). 어떤 구체적인 문제가 발생 했습니까?
ashes999

귀하의 진술 : "단순한 이미지가 있습니다. 알파로 색상을 지정하여 김프로 만든 모든 png를 십자형, 원형 ​​및 보드로 만듭니다." 해석 될 수 많은 알파 곱한를 사전에 색상 키 투명성 다른 방법을. 무슨 뜻인지 알 수 있습니까? 일반적으로 알파 블렌딩 (알파 투명도) 또는 알파 테스트 (알파 마스크)가 필요합니다. 이 중 어느 것도 기본적으로 활성화되어 있지 않으며 두 번째는 최신 OpenGL에서 지원되지 않습니다.
Andon M. Coleman

답변:



2

Sprite를 만들고 Texture를 할당 한 다음 Sprite setColor를 사용하여 알파를 조정합니다.

Texture yourTexture = new Texture("image.png");
sprite = new Sprite(yourTexture);
//RGBA
sprite.setColor(1, 0, 0, 0.2f);

render () 루프에서 SpriteBatch를 사용하십시오.

sprite.draw(spriteBatch);

SpriteBatch는 DefaultShader를 사용합니다. 투명도를 제어하기 위해 자체 셰이더를 작성하려면 물론 OpenGL ES 2.0을 활성화해야합니다.
다니엘

1

당신이 넣어

Gdx.gl.glClearColor(0, 0, 0, 1); 
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

render () 루프의 시작 부분에 검은 색으로 화면을 새로 고쳐야합니다. 이미지가 투명하면 눈에 띄게 나타납니다.

따라서 render () 루프는 다음과 같이 보일 것입니다.

public void render(float delta) {
  Gdx.gl.glClearColor(0, 0, 0, 1);
  Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

  // Update logic & etc.        

  batch.begin();

  // Place your render calls
  // In this I use a Sprite object named "sprite" and all you need to do is call .draw();
  // on it and it will render at 0,0, unless told differently with .setPosition();

  sprite.draw(batch);

  batch.end();              
}

0

투명도를 가진 .png를 렌더링하려고했습니다. 기본 설정 (블렌딩이 활성화되지 않음)에서는 제대로 렌더링되지 않았습니다.

블렌딩을 활성화하지는 않았지만 다음을 추가했습니다.

Gdx.gl.glClear(GL20.GL_ALPHA_BITS);

내 문제는 알파가 지워지지 않았다는 것입니다. 즉, 0.1 알파로 렌더링하면 알파가 1까지 다시 쌓일 때까지 10 프레임이 걸립니다. 위의 호출을 추가하면 색상을 지우는 것처럼 알파가 지워집니다.

나는 이것이 오래된 질문이라는 것을 알고 있으므로 솔루션은 다릅니다. enableBlending은 여전히 ​​작동하지만 이것이 알파의 "스태킹"을 방해하는지 확실하지 않습니다. 알파 비트를 지우는 것이 견고한 모양을 방지하는 가장 쉬운 방법 일 것입니다.

실제 렌더링과 마찬가지로 항상 동일합니다.

//Viewport, camera, logic, etc
batch.begin();
//draw your image(s) here
batch.end();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.