Physics 4

[게임 프레임워크 개발 일지] #13 Collider System

2D Collider를 만들고, Broadphase까지 적용한 건 좋았는데 그래서 캐릭터와 벽이 충돌하는 건 언제 볼 수 있느냐가 문제입니다. Entity 간의 상호작용이므로, 충돌 상호작용을 전담할 System을 설계해야 합니다. 여기서 만들 Collider System은 (처리할 Scene 내의) Entity 목록을 받아와서 1. 각 Entity의 collider boundary를 계산해서 AABB를 만들고 2. 그 AABB에 대해 broadphase를 거친 뒤에 3. 실제 collider 끼리 비교해서 충돌한 두 Entity pair에게 Collided Event를 호출해야 합니다. 여기서 Entity가 collider를 갖고 있어야 하니, Collidable이라는 Component를 가진 Enti..

C++/Game 2023.05.26

[게임 프레임워크 개발 일지] #11 충돌 시스템 개선하기 - Broad Phase

2D 충돌 알고리즘에 대해서는 이전 포스팅에서 다뤄본 적이 있습니다. 실제로 사용하려면, 각 Entity마다 Collider를 할당하고, pair에 대해서 충돌하는지 검사해주면 됩니다. 그런데 막상 사용하려고 코드를 짜보니 이중 for 문에 O(N^2)이 나오더군요. 무식하게 pair를 만들고 다 비교하려고 해서 그렇습니다. Brute Force는 대충 다음처럼 돌아갑니다. for (int i = 0; i < colliders.size(); i++) { for (int j = i + 1; j < colliders.size(); j++) { if (Collide(colliders[i], colliders[j])) { //collide } } } Collider를 만들 때 QuadTree를 사용해서 최적화를..

C++/Game 2022.10.05

[Physics] 2D 충돌 감지 구현하기 (2D Collision Detection) - Part 2

지난 번에 이어, Part 2입니다. 기본적인 구성 요소는 Part 1에서 모두 구현했기 때문에, 이번에 다룰 내용은 Part 1의 간단한 응용에 지나지 않습니다. 1. RoundRect 모서리가 둥근 사각형을 구현하기 위해서는 우리가 잘 아는, 이미 정의된 도형들로 Decomposition을 해줄 필요가 있습니다. 오늘 다룰 두 가지 도형들은 모두 이렇게 decomposition이 필요합니다. RoundRect같은 경우에는 이 과정이 매우 간단한 편에 속합니다. 사각형의 width와 height, 네 귀퉁이에 그릴 원의 반지름 r은 사용자가 결정하게끔 해줍시다. 전체 너비 및 높이의 합이 width + r, height + r이 되도록 속성을 분리해줘도 좋고, 전체 너비 및 높이를 width, heig..

C++/Game 2022.04.10

[Physics] 2D 충돌 감지 구현하기 (2D Collision Detection) - Part 1

안녕하세요. 오늘은 C++로 2D 충돌 처리를 구현해봅시다. Part 1에서는 AABB, 원, 볼록 다각형을 구현해보고 Part 2에서는 요걸 응용해서 RoundRect나 오목 다각형도 만들어 볼겁니다. Reference - https://gamedevelopment.tutsplus.com/series/how-to-create-a-custom-physics-engine--gamedev-12715 How to Create a Custom Physics Engine - Envato Tuts+ Game Development Tutorials There are many reasons you might want to create a custom physics engine: first, learning and ho..

C++/Game 2022.04.09