일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- VS ERROR
- Programming
- c++
- 프로그래밍
- 리뷰
- 김성엽
- 알고리즘
- doit코틀린프로그래밍
- CS
- Direct2D
- 이지스퍼블리싱
- c
- Tips강좌
- 포인터
- Visual Studio
- Windows
- Kotlin
- 문법
- 함수
- Javascript
- Desktop
- 티스토리
- c#
- 연산자
- tipssoft
- 지식나눔강좌
- Win32
- 백준
- Tips프로그래밍강좌
- 배열
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
사각형의 충돌 판정 본문
게임이란 현대 기술의 정점을 모두 포함하고 있는 기술의 정수다
문득 이런 구절이 떠오르는 포스트가 아닐까 생각합니다. 누가 말했는지는 몰라도 정말 한번에 와 닿는 말이 아닐 수 없습니다. RPG에서만 보더라도 다양한 물리 법칙이 적용된 엔진[# 유니티와 언리얼이 대표적이죠]이 사용되고, FPS 게임에서는 심지어 탄도학도 이용[# 단순히 배틀그라운드 탄도학만 검색해도 나오는 글이 수 십 개...]합니다.
게임에서 중요한 것 중 하나가 막혀 있는 곳을 가지 못하는 것이라 생각합니다. 생각해보세요. 현실에서 물건을 짚으려 손을 뻗었는데 짚이기는 커녕 그 물건을 통과해버린다면. 아마도 기절하지 않을까요?
그래서 게임에서는 물리 엔진을 사용합니다. 사실 게임에만 사용한다기보단, 여러 산업 전반에서 사용하고 있죠. 건축할 때 어떻게 지어야 하중을 견딜 수 있는지 무너지지는 않는지 시뮬레이션을 하고, 영화 인터스텔라에서도 물리엔진을 적용해 생생한 블랙홀 영상을 만들어냈죠.
이번 포스트에서는 충돌 판정, 그 중에서도 사각형의 충돌 판정을 이야기합니다.
충돌 판정
충돌 판정을 일반적으로 수학 연산을 이용하곤 합니다. 원의 충돌은 두 원의 반지름의 합을 기준으로 충돌을 처리하죠. 그러나 사각형의 충돌 판정은 어려운 수학식이 필요하지 않습니다.
아래처럼 두 개의 사각형이 존재합니다.
이 두 사각형은 아직 만나지 않았습니다. 벽이 맡닿았을 때 충돌한다고 볼 수 있습니다. 따라서, 아래와같이 구성하게 되면 충돌을 판정할 수 있습니다.
D2D1_RECT_F r1, r2;
//Direct2D를 이용하지 않는경우
//RECT r1, r2;
if(r1.left < r2.right && r1.right > r2.left && r1.top < r2.bottom && r1.bottom > r2.top){
MessageBox(nullptr, L"Detect", L"", 0);
}
시연
아래 영상은 실제 위 충돌 판정을 검증한 모습입니다.
심화
# index
'DEV > C C++' 카테고리의 다른 글
Win32 - 키보드 입력으로 사각형 움직이기 (0) | 2021.05.08 |
---|---|
원의 충돌 판정 (0) | 2021.05.08 |
Win32 - 데스크탑 화면에 윈도우 배치하기 (1) | 2021.04.08 |
GetWindowRect vs GetClientRect (0) | 2021.04.07 |
Win32 MainWindow Class 생성하기 (0) | 2021.04.05 |