java - 2D 손전등 효과를 어떻게 렌더링해야합니까?

출처 java libgdx

2D 게임에서 손전등 효과를 만들려고합니다. 내 손전등은 엔티티에서 특정 각도로 연장되는 선분으로 표시됩니다. 손전등은 모든 방향을 가리킬 수 있습니다. 손전등은 또한 강도 (손전등 빔의 길이)에 따라 다릅니다.

손전등 효과를 렌더링하는 가장 좋은 (가장 쉬울까요?) 가장 유연한 방법을 찾는 데 문제가 있습니다. 특히 타일 맵이 있습니다.

두 가지 방법을 생각할 수 있습니다. 그러나 나는 그것들을 구현할 생각이 없습니다.


타일 ​​맵의 원추형 / 원형 세그먼트 만 그립니다.
화면을 검은 색 텍스처로 덮고 코드로 검은 색 텍스처에 구멍을 뚫습니다. 이렇게하면 구멍의 속성을 변경할 수 있습니다.


나는 이것으로 시작해야 할 곳 / 이것들이 무엇인지 / libGDX가 할 수 있다면 무엇인지에 대해 단서가 없습니다.
첫 번째는 스텐실 버퍼입니다. 그러나 부드러운 효과를 얻기가 어려울 것입니다. -쉬움.

두 번째 : 조명이있는 텍스처가 필요합니다. 완전히 검은 색 영역은 라이트 스프라이트 주위에 검은 색 스프라이트 (왼쪽, 오른쪽, 위, 아래)를 반복하여 그릴 수 있습니다. 또는 스텐실 버퍼와 혼합 할 수 있습니다. 또는 텍스처 좌표를 신중하게 계산하고 GL.clamp_to_edge를 사용하여 모든 검은 색 픽셀을 전파 할 수 있습니다. 장면을 렌더링하는 방법에 따라 먼저 알파 정보로 조명을 렌더링 한 다음 장면을 혼합 할 수 있습니다 (dst_alpha에 따라 어두워 짐). -구현하기 어렵지 않습니다.

세 번째는 쉐이더 (GLES 2.0)에 대한 연구입니다. 메쉬를 렌더링하여 구멍 화면을 채우고 셰이더 계산을 통해 어둡게 할 수 있습니다. -이것은 가장 유연하고 가장 어려운 옵션입니다 (어쨌든 로켓 과학과는 거리가 멀다).

일부 옵션은 다른 옵션보다 좋게 들리지만 제공 한 정보를 제공하면 더 이상 말할 수 없습니다. 조사를 시작하는 좋은 출발점이 있습니다.

** 텍스처 작업을 선택하는 경우 배터리에 따라 몇 가지 다른 텍스처를 고려하십시오. 약간의 크기를 조절하거나 색을 칠할 수 있지만 다른 질감을 갖는 것이 훨씬 더 유연합니다.
관련 기사

java - 날짜 시간을 JAVA 날짜로 구문 분석

java - XQuery에서 배열을 사용하거나 구현하는 방법은 무엇입니까?

java - 인스턴스 변수의 이름이 인수 변수와 같을 때 호출

java - 객체 배열의 모든 조합

java - Java의 arraylist에 대용량 파일을로드하는 가장 좋은 방법

java - 배포 (게시) 후 Weblogic 오류 : 오류 503-- 서비스를 사용할 수 없음

java - "리소스로 시도"에 문제가 있음

java - Java 인터페이스에 대한 Java 특성 파일 바인딩

java - 날짜 시간 형식 Java로 시간 추가

java - Java의 내부 클래스에서 변수에 액세스