top of page

ferox: An open-source, lightweight 2D physics engine written in C

최종 수정일: 6월 4일




팀명

Don The-Ku


팀원 명단

김재덕, 이경돈, 이민후


지도교수

조은선 교수님


작품 배경 및 목적

컴퓨터 게임에서 강체 역학 (rigid-body dynamics)과 같은 물리 시뮬레이션 (physically-based simulations)은 게임 이용자에게 실감 나는 경험을 제공한다. 캐릭터, 지형 (terrain), 그리고 입자 (particles)와 같은 물리 기반의 물체들이 게임 세계에 더 많이 추가될수록, 게임에 대한 몰입감은 더 높아지게 된다. 이러한 이유로 인해, 게임 프로그래머들이 게임 개발 시에 물리 엔진 (physics engine)을 이용하는 경우가 많아지고 있다.


게임 이용자에게 최적의 게임 플레이 경험과 적절한 프레임 레이트 (frame rate)을 제공하기 위해서는 물리 엔진의 성능을 필수적으로 고려해야 한다. 이러한 목적을 달성하기 위해서는 물체 사이의 충돌을 실시간 (real-time)으로 해결할 수 있는 매우 효율적인 충돌 감지 (collision detection) 알고리즘이 필요하다.


또한, raylib이나 SDL 등의 게임 프로그래밍 라이브러리를 이용하는 게임 프로그래머들은 기초적인 물리 시뮬레이션만을 필요로 하는 플랫포머 (platformer), 슈팅 게임 (shooting game) 또는 퍼즐 게임 (puzzle game) 등의 게임 개발 시에 Box2D-Lite 또는 Physac과 같은 경량 (lightweight) 물리 엔진을 사용하는 경우가 많은데, 이러한 경량 물리 엔진들은 광역 충돌 감지 단계 (broad-phase collision detection stage) 구현을 위해 브루트-포스 (brute-force) 알고리즘을 채택하여 몇천 개 이상의 물체에 대한 충돌을 실시간으로 해결하기 어렵다는 문제점이 존재한다.


작품 내용

ISO/IEC 9899:1999 (C99) 표준을 준수하는 경량 2D 물리 엔진 개발

- 공간 해싱 (spatial hashing) 기법을 이용한 광역 충돌 감지 단계의 성능 향상 및 최적화

- 분리 축 정리 (Separating Axis Theorem, SAT)와 Sutherland–Hodgman 알고리즘을 이용한 지역 충돌 감지 단계 (narrow-phase collision detection stage) 구현

- raylib이나 SDL 등의 게임 프로그래밍 라이브러리를 이용하는 게임 프로그래머들을 위한 쉽고 직관적인 API, 예제 코드 및 개발 문서 제공







조회수 193회댓글 0개

Comments


bottom of page