블록 기반 2D 게임에서 폐색 조명을 어떻게 구현합니까?


11

게임 내 오브젝트로 차단할 수있는 2D 조명을 갖고 싶습니다. 내 게임에는 하향식보기가 있으며 모든 게임 개체는 사각형으로 표시됩니다.

10x10 월드가 있고 1x1에 라이트를 배치하고 해당 라이트 주위에 벽을 배치한다고 가정하겠습니다. 1x1에서 광원을 볼 수 있기를 원하지만 벽에 의해 막혀 있기 때문에 다른 곳에서는 볼 수 없습니다.

나는 광선이 작동한다는 이야기를 들었지만 실제로 어떻게 작동합니까?


1
이 질문에 대한 언어에 구애받지 않는 답변을보고 싶습니다.
Dashto

2
@ 대시 토 : 사용하는 언어로 작동하는 코드가 필요하십니까? 그건 잘못된 장소입니다 ..
Kromster

무엇을 시도 했습니까? "다른 광원이없는 곳"이라고 말하면 무슨 뜻입니까? 1,1 블록 만 켜면됩니다. 어쩌면 나는 당신의 질문을 얻지 못합니다, 당신은 그림을 게시 할 수 있습니까?
Laurent Couvidou 2016 년

1
@ 크롬 스턴 (Krom Stern) : 나는 언어에 의존하지 않는 개념적 대답과 정확히 반대입니다. 중복으로 연결된 두 개의 스레드는 개념에 대해별로 이야기하지 않습니다. 실제로이 사이트에서 비슷한 질문들 대부분은 "이 라이브러리 사용!" 작동 방식을 이해하려는 사람에게는 도움이되지 않습니다.
Dashto 2016 년

@Dashto : 중요한 정보입니다. 질문에 추가해야합니다.)
Kromster

답변:


13

Amit Patel은 2D 레이 캐스팅에 관한 매우 훌륭한 기사 를 작성 했습니다 .

여기에는 광원 범위 내의 각 정점에 광선을 캐스팅하여 라이트 메시를 만드는 과정이 포함됩니다.

여기에 이미지 설명을 입력하십시오

모든 시각적 예는 게시물에서 대화식이며 이해하기 매우 쉽습니다.

상자에 자신을 제한 할 필요는 없습니다. 추적하는 경계선은 원하는 모양이 될 수 있습니다.


1

당신은 사용해야 raycasting 알고리즘 당신은 당신의 장면에서 모든 개체와 선 (하프 라인)의 교차점을 계산 할 수 있어야한다, 수단 (선, 사각형, 원, 삼각형 ....)와 가장 가까운 교차로를 선택합니다. 광선을 모든 방향으로 투사 한 다음 가장 가까운 물체에만 "빛을 그립니다".

다음 과 같이 보일 수 있습니다.


방금 레이 캐스팅을 어떻게 사용할지 물었습니다. 나도 알아
LiquidFeline 2018 년

0

레이 캐스팅이 무엇인지 아는 경우 실제로 하드 코딩하기 만하면됩니다. 각 정점에 대한 좌표가있는 한 지나치게 복잡하지 않습니다.

먼저 빛을 발산하는 물체를 만듭니다. x, y 좌표에 조명을 놓습니다.

#include <math.h>
int i = 0;
if ( sqrt( abs( light.x - vertex.x )^2 + abs( light.y - vertex.y )^2 ) <= light.radius)
{
    lightOccludingVertices[i] = vertex;
    i++;
}

//If two or more vertices are both a member of an individual wall,
//illuminate the triangular area between the light, the furthest 
//vertex on the x-axis, and the furthest vertex on the y-axis

이것은 오목한 다각형에는 적용되지 않지만 볼록한 다각형에는 적합합니다.

조명을 적용한 후 폐색 물체 (벽, 캐릭터, 날고있는 자주색 사람 먹는 사람)를 화면에 페인트하면이 기능이 작동합니다. 그렇지 않으면 벽의 절반이 다른 절반보다 훨씬 밝게 나타납니다. 포인트 라이트가 동일한 벽의 두 쌍의 꼭짓점에서 동일 거리에 있으면 (정확히 벽 높이의 절반) 삼각형을 멀리 떨어진 두 개의 꼭짓점에 적용하십시오.

또한이 방법을 사용하려면 빛의 반경 가장자리가 폐색 물체의 표면과 만나는 역동적으로 생성 된 정점이 필요 합니다. 이렇게하면 폐색 오브젝트에 대해 최소 3 개의 꼭짓점이 만들어지고 빛의 반경을지나 (또는 ​​화면 바깥쪽으로) 벽이 빛을 차단할 수 있습니다.

오목 및 볼록 다각형에 대한 추가 정보

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.