VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
animEvaluator.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2025-2026 Arnis Lektauers
3#pragma once
4
5#include <memory>
6#include <unordered_map>
7#include <vector>
8
10#include "animClip.h"
11
12namespace visutwin::canvas
13{
15 {
16 public:
17 explicit AnimEvaluator(std::unique_ptr<AnimBinder> binder);
18
19 const std::vector<std::shared_ptr<AnimClip>>& clips() const { return _clips; }
20 std::vector<std::shared_ptr<AnimClip>>& clips() { return _clips; }
21
22 void addClip(const std::shared_ptr<AnimClip>& clip);
23 void removeClip(size_t index);
24 void removeClips();
25
26 void update(float dt);
27
28 private:
29 static Vector3 lerpVec3(const Vector3& a, const Vector3& b, float alpha);
30 static Quaternion slerpQuat(const Quaternion& a, const Quaternion& b, float alpha);
31
32 std::unique_ptr<AnimBinder> _binder;
33 std::vector<std::shared_ptr<AnimClip>> _clips;
34
35 std::unordered_map<std::string, AnimTransform> _tmpA;
36 std::unordered_map<std::string, AnimTransform> _tmpB;
37 };
38}
const std::vector< std::shared_ptr< AnimClip > > & clips() const
std::vector< std::shared_ptr< AnimClip > > & clips()
AnimEvaluator(std::unique_ptr< AnimBinder > binder)
void addClip(const std::shared_ptr< AnimClip > &clip)
Unit quaternion for rotation representation with SIMD-accelerated slerp and multiply.
Definition quaternion.h:20
3D vector for positions, directions, and normals with multi-backend SIMD acceleration.
Definition vector3.h:29