Libgx 1.x Stage에서 내 목표는 원래 화면을 표시해야하는 영역을 제외하고 어두운 반투명 마스크를 화면에 적용하는 것입니다.렌더링()에서 Libgdx 블렌딩 대비 문제가 발생했습니다.
내 글로벌 렌더링 방법 : 객체 Darkener 및 스포트 라이트의
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.setShader(null);
update();
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
batch.begin();
darkener.draw(batch, 0.7f);
spotlight.draw(batch, 1f);
batch.end();
}
두 인스턴스 순수한 흰색 4 × 4 텍스처로 만든 스프라이트 있습니다
spotlight = new Sprite(new Texture(Gdx.files.internal("data/ui/whitepixel.png")));
darkener = new Sprite(new Texture(Gdx.files.internal("data/ui/whitepixel.png")));
가 나는 줄 내 Darkener 화면의 크기를 객체 , 그리고 Spotlight 객체는 내가 어두워지기를 원치 않는 영역의 크기입니다. 를 매개 변수로 :
public void draw(Batch batch, float alpha) {
batch.setBlendFunction(GL20.GL_DST_COLOR, GL20.GL_SRC_ALPHA);
spotlight.draw(batch, alpha);
batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
}
내 문제가 혼합에 관한 것입니다 :
public void draw(Batch batch, float alpha) {
darkener.draw(batch, alpha);
}
그리고 내 스포트라이트 객체의 그리기 방법 : 여기
내 객체 darkener의 그리기 방법darkener.draw(batch, 0.7f);
spotlight.draw(batch, 1f);
보존 된 (스포트라이트) 영역이 원본보다 어둡습니다. 파라미터와
다음 보존 (주목) 영역이 밝
darkener.draw(batch, 0.3f);
spotlight.draw(batch, 1f);
원본보다 (포화). paremeters와
: (내가 원하는, 그래서)
이darkener.draw(batch, 0.5f);
spotlight.draw(batch, 1f);
보존 된 (스포트라이트) 영역은 원본과 똑같은입니다. 문제는 제 어둡게에 대해 다른 값을 설정할 수 있기를 원합니다. < 0.5f 또는> 0.5f입니다.
내가 뭘 잘못하고 있니?
안녕하세요 @ Tenfour04, 그리고 당신의 답변에 감사드립니다. 문제의 원인에 대해서는 분명히 맞습니다. 그러나 스포트라이트에 필요한 알파를 찾기위한 수식은 1/darkener alpha입니까?그것은 나에게 원하는 결과를 제공하지 않지만 darkener = 0.6, 0.7 등등에 대한 ok 결과를 찾았습니다. 또한 8 개의 어두운 상자를 그리기 위해 조금 더 자세히 설명해 주시겠습니까? 나는 바보 같지만 전혀 얻지 못했다! 시간과 좋은 아이디어를 주셔서 감사합니다 – Don
나는 그것이 옳다고 생각하지만, 어떤 정보가 누락되었을 수 있습니다. 위에 설명 된 내용을 토대로 어두운 부분은 반투명 한 흰색 직사각형을 그리기 때문에 화면을 더 옅게 만듭니다. 네가 흑인이 된 것으로 추정하고 있었다. 그리고 실제로 나는 그 가정에 기초하여 그것을 뒤집어 놓았을 것이라고 생각합니다. 8 개의 어두운 상자 란 의미합니다. 스도쿠 격자 9 개를 상상해보십시오. 단, 화면에 맞게 늘리면 안쪽 선을 이동시켜 가운데 상자가 스포트라이트의 크기가되도록하십시오. 주변의 8 개 상자의 좌표에 어둡게를 그릴 수 있고 가운데 상자에 스포트라이트 스프라이트를 그릴 수 있습니다. – Tenfour04
나는 나의 설명이 불분명하다는 것을 깨달았다. '0.7까지 어두워진다'는 것은 어둡게하는 스프라이트가 검은 색이라고 가정 할 때 0.3의 어둡게 알파를 사용하는 것과 같은 원래의 밝기의 70 %까지 어둡게한다는 의미입니다. 따라서 스포트라이트 알파의 공식은'1/(1-darkenerAlpha) - 1'. – Tenfour04