작성
·
18
0
영상에서는 ModelAnimator의 update함수에서
keyframeDesc의 sumtime을 갱신해줄 때 다음과 같은 코드로 작성되었는데.shared_ptr<ModelAnimation> current = model->GetAnimationByIndex(keyframeDesc.animIndex);
if (current)
{
float timePerFame = 1 / (current->frameRate * _keyframeDesc.speed);
if (_keyframeDesc.sumTime >= timePerFame)
{
keyframeDesc.sumTime = 0; //keyframeDesc.sumTime - timePerFame; // 0
keyframeDesc.currFrame = (keyframeDesc.currFrame + 1) % current->frameCount;
keyframeDesc.nextFrame = (keyframeDesc.currFrame + 1) % current->frameCount;
}
keyframeDesc.ratio = (keyframeDesc.sumTime / timePerFame);
}
이 부분에서 _keyframeDesc.sumTime = 0;
이런식으로 sumTime을 0으로 하는것보다,keyframeDesc.sumTime = keyframeDesc.sumTime - timePerFame;
처럼 계산 후 남는 값을 넣어주는 것이 더 정확하지 않을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 최성호님.
프레임 간 보간과 관련된 질문 주셨네요. 말씀하신 내용에 대해 간단히 설명드리겠습니다.
프레임 간 보간에서 sumTime
값을 0으로 초기화하는 것과 sumTime
에서 timePerFrame
을 빼주는 것은 실제 구현 시의 목적과 결과에 따라 다릅니다.
현재 코드에서는 sumTime
이 timePerFrame
이상일 때마다 해당 프레임을 넘어갈 때마다 currFrame
과 nextFrame
을 갱신하고 sumTime
을 0으로 초기화하도록 설정되어 있습니다. 이는 매우 단순하고 직관적인 방식으로 매 프레임 전환 시 시작 지점을 0으로 리셋하여 다음 계산을 위한 초기 상태로 만들려는 의도입니다.
만약 수치적인 완벽한 시간 관리를 원한다면 sumTime = sumTime - timePerFrame;
방식으로 남은 시간을 보존하는 것도 의미가 있습니다. 이를 통해 초과된 시간을 다음 계산에 사용할 수 있어 정밀한 시간 추적이 가능합니다. 이 방식은 매우 세밀한 타이밍이 필요한 경우, 특히 부드러운 애니메이션이나 정확한 물리 계산이 중요한 경우에 유용합니다.
프레임 관리 질문입니다.라는 유사한 질문도 참고하시면 도움이 될 것 같습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.