대학교 그래픽스 강의에서 OpenGL로 간단한 FPS를 구현했었습니다.
세가 신입사원 책이랑 게임 프로그래밍 패턴 책을 참고했었습니다.
핵심 아이디어만 간단히 요약해서 정리해둡니다.
카메라
LearnOpenGL 사이트에 카메라에 대해서 정말 잘 설명되어있습니다.https://learnopengl.com/Getting-started/Camera
수평으로만 회전하는 카메라를 구현하고 먼저 키보드 이동까지 구현해보면 좋습니다.
수평은 생각보다 쉽습니다. 수직으로 카메라를 돌리기가 막히면 먼저 해보세요.
GLFW를 썼습니다.
화면을 가운데로 마우스 커서를 옮기는 glfwSetCursorPos()는 glfwSetCursorPosCallback 안에서 했습니다.
다른 환경에서도 마우스 이벤트는 입력 받는 곳에서 같이 처리하세요.
쿼터니언을 썼습니다.
https://youtu.be/_nJLDmue0h4
1인칭 시점을 3인칭으로 바꾸려면 offset을 적절히 사용하면 됩니다.
https://youtu.be/PoxDDZmctnU
플레이어
손과 총 모델은 언리얼엔진4 기본 FPS 게임의 마네킹을 추출해서 썼습니다.FPS 1인칭 시점에서 캐릭터 모델은 저렇게 총과 손만 있습니다.
이동하는 방향으로 캐릭터가 움직일 때 카메라는 캐릭터의 위치를 그대로 씁시다.
바닥에 붙어서 이동하는건 wasd에 카메라의 수평을 곱하면 됩니다.
간단한 반동은 캐릭터의 위치에서 모델을 위아래로 조금씩 흔들어주면 됩니다.
총알
파티클 예제를 만들어야 했습니다(?)간단한 물리(중력)를 구현했습니다.
캐릭터 위치에서 총알이 발사되는 위치는 적절하게 offset 주면 됩니다.
제 경우 충돌처리를 AABB를 간단히 구현했습니다.
충돌처리에 대해 조금 더 자세한 설명은 아래 블로그를 참고해주세요.
http://blog.naver.com/PostView.nhn?blogId=36513535&logNo=10024329388
히트스캔으로 구현하고 싶다고 총알의 속도를 높여봐야 소용 없습니다.
일반적인 게임의 물리 구조 상 너무 빠른 물체는 충돌처리가 불가능합니다.
대신 총의 발사 위치에서 직선으로 벡터를 쏘세요, 레이 트레이싱이랑 비슷한 원리입니다.
기타
게임의 기본적인 구성에 대해서 알고 계시면 구현이 편합니다.https://www.slideshare.net/sm9kr/6-20903192
댓글 없음:
댓글 쓰기