일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- AppSW
- Specular
- 작업 집합
- 게임 수학
- Cell Shader
- Three(Two) Tone Shading
- 가상 바이트
- ColorGradingLutPass
- URP
- Virtual Byte
- 3d
- 벡터
- Private Bytes
- C언어
- Rim Light
- Cell Look
- 개인 바이트
- working set
- OculusMotionVectorPass
- ASW(Application SpaceWarp)
- 메모리 누수
- URP로 변경
- 프로그래밍 기초
- Cartoon Rendering
- Windows Build
- VR
- Toon Shader
- Today
- Total
WinCNT
Collision Detection 본문
충돌 감지(충돌 체크)
2D 게임에서 필수적인 것
CC(Circle Collision), AABB, OBB
CC는 3D의 바운딩 스피어
Collision Detection
Sphere, AABB, OBB, 8-DOP......
예시) 유니티의 메시 컬라이더 - 폴리곤 자체로 충돌 처리
CC/AABB/OBB
CC
원과 원의 반지름, 원의 중점 간의 거리
사실 AABB보다 비용이 많이 든다...대신 직관적으로는 이해하기 쉬움
구현 힌트
(서클)collider 클래스를 만든다
반지름
위치값(정확히는 collider를 가지고 있는 오브젝트가 가지고 있음)
AABB
Axis-Aligned Bounding Box(축 정렬 경계 상자)
축에 나란하게 생긴 BB
CC보다 비용 - 연산에 드는 시간(혹은 메모리)이 적게 든다
박스와 박스의 Min과 Max의 대소비교를 4번하면 된다
OBB
Oriented Bounding Box
아이디어
임의의 장소에 시선 벡터를 둔다고 했을때
두 객체가 겹치지 않는 경우가 있으면 겹치지 않는 것
하지만 모든 방향에 대해서 시선 벡터를 잡아서
비교할 필요는 없다는 것은 이미 증명된 사실이다
(초평면분리 이론, Hyperplane separation theorem)
각각의 오브젝트의 모서리 8방향을 벡터로 잡으면 됨
(정확히는 사각형은 2개의 벡터로 이루어져있으므로시선 벡터로 잡을 것은 4번)
Direction Light(시선)에 그림자 진다(투영)는 느낌?인가
물리에서 벡터를 가르칠 때
속력 - 스칼라 - 60Km/h
속도 - 벡터 - 북북서 방향으로 60Km/h
정사영(Orthographic projection, 직교 사영)
벡터와 벡터를 내적하면 정사영이 나온다
벡터와 벡터의 사영을 벡터 사영??이라고도 한다
OOB에서 중요한 것은 다른 벡터에 정사영한 값을 비교할 수 있다는 것
그리고 착각하기 쉬운 것은 시선 벡터를 구하기 위한
사각형의 엣지가 그대로 투영된다는 것은 아니다
시선 벡터랑 각각의 OBB의 점을 위치 벡터(점 8개)로 잡고 시선 벡터에 투영(내적)하는 것이 정답
(특정 점의 정보는 원점에서 본 좌표까지의 벡터로 해석할 수 있다)
초평면분리 이론은 물리 엔진에서도 다시 한 번 문제가 나온다
CC은 반사가 쉽지만, 다각형인 경우는 매우 어려움...
gilbert-johnson-keerthi distance algorithm
참고 사이트
https://codeonwort.tistory.com/291
SSS
'게임 프로그래밍(학습 내용 정리) > 2D Game Programming' 카테고리의 다른 글
Physics (0) | 2022.01.19 |
---|---|
Transform (0) | 2022.01.12 |
Direct2D (0) | 2022.01.06 |
2D 게임 프로그래밍의 간략한 역사 (0) | 2022.01.05 |