Класс анимации и её каналов
This commit is contained in:
74
include/Animation.h
Normal file
74
include/Animation.h
Normal file
@@ -0,0 +1,74 @@
|
||||
#ifndef ANIMATION_H
|
||||
#define ANIMATION_H
|
||||
|
||||
#include "Model.h"
|
||||
|
||||
#include <chrono> // Время
|
||||
|
||||
// Тип интерполяции
|
||||
enum INTERPOLIATION_TYPE
|
||||
{
|
||||
STEP,
|
||||
LINEAR,
|
||||
CUBICSPLINE
|
||||
};
|
||||
|
||||
// Анимируемый параметр
|
||||
enum TARGET_PATH
|
||||
{
|
||||
POSITION,
|
||||
ROTATION,
|
||||
SCALE
|
||||
};
|
||||
|
||||
// Поведение при завершении шкалы ключевых кадров
|
||||
enum ANIM_ENDINGS
|
||||
{
|
||||
STOP,
|
||||
TO_BEGIN,
|
||||
CYCLED
|
||||
};
|
||||
|
||||
union PARAMETER_TYPE
|
||||
{
|
||||
glm::quat quat;
|
||||
glm::vec3 vec3;
|
||||
};
|
||||
|
||||
// Касательные для кубической-сплайн интерполяции
|
||||
struct Tangents
|
||||
{
|
||||
PARAMETER_TYPE in;
|
||||
PARAMETER_TYPE out;
|
||||
};
|
||||
|
||||
// Канал анимации
|
||||
struct Channel
|
||||
{
|
||||
void process(float dtime, ANIM_ENDINGS endings); // Выполнить анимацию для канала с учетом времени относительно начала
|
||||
|
||||
class Node* target = NULL; // Анимируемый узел
|
||||
TARGET_PATH path = POSITION; // Анимируемый параметр
|
||||
|
||||
INTERPOLIATION_TYPE interpolation = STEP; // Тип интерполяции
|
||||
std::vector<float> timestamps; // Временные метки !ОБЯЗАТЕЛЬНО ОТСОРТИРОВАНЫ ПО ВОЗРАСТАНИЮ!
|
||||
std::vector<PARAMETER_TYPE> values; // Данные по параметру (ИНДЕКС СООТВЕТСТВУЕТ ВРЕМЕННЫМ МЕТКАМ)
|
||||
std::vector<Tangents> tangents; // Касательные для CUBICSPLINE
|
||||
};
|
||||
|
||||
// Класс анимации
|
||||
class Animation
|
||||
{
|
||||
public:
|
||||
void begin(); // Задает состояние анимации как начало через запоминание времени
|
||||
void end(); // Заканчивает выполнение анимации
|
||||
void process(); // Вычисляет анимацию для каждого канала на основании текущего времени
|
||||
bool isEnabled(); // Возвращает состояние анимации (вкл/выкл)
|
||||
std::vector<Channel> channels; // Каналы анимации
|
||||
ANIM_ENDINGS endings = CYCLED;
|
||||
private:
|
||||
std::chrono::steady_clock::time_point begin_time; // Время начала анимации
|
||||
bool enabled = false;
|
||||
};
|
||||
|
||||
#endif // ANIMATION_H
|
||||
Reference in New Issue
Block a user