적 오브젝트의 시야처리

게임의 인공지능에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

적 오브젝트의 시야처리

Post by 비회원 »

2D 게임을 만들려고합니다..

적오브젝트가 보고있는 시야을 부채꼴로 나타낼려고합니다..

장애물이 있음면 그뒤는 못보는것으로 표시할려고합니다. 우선 알고리즘을 잘모르니

제일먼저 떠오르는것은 라인긋기 알고리즘으로 선을 촘촘히 그리는건대

당연히 중간에 구멍도 뚫리고 느리내요..

이것을 깔끔히 해결할 방법이 없을까요?

고수님들의 답변 꼭부탁드립니다

[email protected]
Iros
Posts: 17
Joined: 2006-05-26 12:13
Location: Eya

부채꼴 충돌.

Post by Iros »

부채꼴 충돌은 속도도 빠르고 간단합니다.

일단 2D이므로.

플레이어와 적오브젝트를 위치를 playerPos, EnemyPos 라고 하고.

적 오브젝트의 시선방향을 EnemyDir 이라 한다면.


적 오브젝트의 감지부체꼴을 detectFan ( center<중심>, range<거리>, angle<각도> ) 만들고


palyerPos에서 EnemyPos 까지 거리가 detectFan.range 보다 작고,

적 오브젝트에서 플레이어를 연결하는 벡터 vecTest 와

EnemyDir 과의 각도가 detectFan.angle 안에 들어오는지 확인 하면 됩니다. ( 내적:DotProduct 활용 )
새로운 게임 개발은 즐겁다..!
비회원

답변 감사드립니다

Post by 비회원 »

헌대.. 그 부채꼴모양의 시야가 장애물에 가려져서 보이는구역 안보이는구역을

화면에다 표시해줘야되는것이 문재입니다..

판정가능구여을 표시해줘야됩니다..

어떤방법으로 가능할까요?
hyperjingun
Posts: 31
Joined: 2007-08-29 14:51

Post by hyperjingun »

장애물이 얼마나 복잡한 형태인가가 관건일 듯 합니다만, 간단한 기하구조라고 한다면(구라던가, 박스라던가) 다음과 같은 방법은 어떠실지..
1. 시야 부채꼴의 중점에서 바라본 장애물의 양 꼭지점을 추려낸다.
2. 중점을 중심으로 하고 양 꼭지점으로 적당히 확장한 선분과 양 꼭지점을 잇는 선분으로 가려졌음을 의미하는 다른 색의 면을 만든다.
3. 시야 부채꼴 위에 덮어 씌워준다.
타올라라 나의 소우주여-
비회원

답변감사드립니다 ^^

Post by 비회원 »

장애물은 박스형태입니다

지금 제가 구상하고있는 방법과 유사한듯합니다

본래 이런식으로하면되는지 ^^;;;;

답변감사드립니다
킬제덴
Posts: 11
Joined: 2009-10-14 18:30

이런방법은 어떨지.

Post by 킬제덴 »

질문보고 재밋어서 저도 좀 생각해봤는데요. ^^

미니맵같이 작은 공간에 표시하는 거라면 이런방법은 어떨까 합니다.

1. 우선 중점과 부채꼴의 양끝점을 모두 포함하는 최소한의 사각형 버퍼를 만듭니다.
2. 이곳에 장애물이 될 영역을 그립니다. 특정색의 단색이면 되겟죠.
3 이제 사각형영역의 모든픽셀에 대해서 아래 검사를 해서 걸러내며 찍습니다
3.1 픽셀위치가 장애물영역이다. -> 걸러냄
3.2 중점과 특정거리이상 떨어져있다. -> 걸러냄
3.3 부채꼴 양끝점의 각도(기울기)와 비교해서 벗어나있다 -> 걸러냄
3.4 중점에서 해당픽셀로 이어지는 기울기로 로 거슬러올라가며 픽셀을 찍다가 장애물색을 만나면 중지한다.
3.5 픽셀을 찍으면서 이미 그자리에 시야픽셀로 찍혀있으면 3.4를 건너뛴다(시야에서 먼쪽부터 그리는게 낫겟죠?)
3.6 부채꼴에 해당하는 모든픽셀에 대해서 3.1~3.5를 반복한다.

부채꼴크기가 풀스크린단위면 비교해야할 픽셀이 너무 많아져서 곤란하겠다 싶기도 한데요
미니맵같이 작은영역이라면 이렇게 해도 크게 속도저하가 없지 않을까 싶네요?
상상으로만 해본거라 제대로 될진 모르겟습니다 ㅋ. 걍 힌트로만 활용하셔도...
imays
Posts: 1044
Joined: 2003-02-18 10:29
Contact:

경험에 입각한 답변 하나

Post by imays »

온라인 게임 서버 엔진 ProudNet
http://www.nettention.com
Locked