이번 글에서는 Human Model에 마지막 애니메이션인 Jump(점프)를 구현한 과정을 정리해 보았다.
점프는 space 키를 누르면 활성화되며, 자연스러운 점프 모션을 위해 걷는 중이라면 그 속도와 발의 위치 그대로 점프가 시작된다.
1. 점프 속도 결정
2. 팔과 다리 움직임
// jumpTheta[0] = 앞 부분의 팔 다리 주기
// jumpTheta[1] = 뒷 부분의 팔 다리 주기
// 앞 부분의 팔 다리 주기를 0.2 * pi 만큼 앞으로 땡겨서 사용하였다.
float jumpTheta[2] = { std::max(0.0f, std::min(glmath::pi * (gravity / (2 * jumpVelocity)) * jumpTime + glmath::pi * 0.2f , glmath::pi)),
std::min(glmath::pi * (gravity / (2 * jumpVelocity)) * jumpTime, glmath::pi)};
// 앞 부분의 팔 다리 주기가 0 부터 시작할 수 있게 구간을 나눠 정의
// 0 ~ 0.4 * pi 구간에는 jumpTheta[0] = jumpTheta[1] * 2.0f 으로 사용
// 0.4 * pi ~ pi 구간에는 jumpTheta[0] = jumpTheta[1] + 0.2f * pi 로 사용
if (jumpTheta[1] <= glmath::pi * 0.2f) {
jumpTheta[0] = jumpTheta[1] * 2.0f;
}
3. 점프 중 행동 제약
점프 중에는 Rotate를 제외한 다른 행동이 불가능하다.
다음은 구현한 점프 애니메이션의 결과이다.
이번 Jump 애니메이션 구현으로 Human Model 프로젝트의 기본적인 애니메이션 시스템이 완성되었다. 팔과 다리의 자연스러운 움직임을 구현하면서, sin 함수와 타이밍 조절을 통해 좀 더 현실적인 모션을 만들어 낼 수 있었다.
HumanGL: 프로젝트를 하며 느낀 점 - (9) (4) | 2024.10.21 |
---|---|
HumanGL: Walk, Rotate, Stop 애니메이션 구현 - (7) (1) | 2024.10.19 |
HumanGL: Human Model에 애니메이션을 적용하기 위한 준비 - (6) (2) | 2024.10.19 |
HumanGL: 카메라 제어 - (5) (3) | 2024.10.14 |
HumanGL: 계층적 모델링과 변환 행렬 스택 구현 - (4) (0) | 2024.10.14 |