载入中...
搜索中...
未找到
Solver3D.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4#include "ik/ChainSolver.h"
5#include "ik/Skeleton3D.h"
6
7#include "ik.hpp"
8
9namespace eve::ik {
10
13public:
15 Solver3D() = default;
17 ~Solver3D() = default;
18
19 Solver3D(const Solver3D &) = delete;
20 Solver3D &operator=(const Solver3D &) = delete;
21
23 void setKeepTrace(bool keep);
25 bool getKeepTrace() const;
26
28 void setMaxIterations(int iterations);
30 int getMaxIterations() const;
32 void setTolerance(float tol);
34 float getTolerance() const;
36 void setForce(float force);
38 float getForce() const;
39
41 void setInfluence(float influence);
43 float getInfluence() const;
44
46 void clearTargets();
48 void addTarget(int boneId, float x, float y, float z, float weight = 1.f);
50 int getTargetCount() const;
51
53 bool solve(Skeleton3D *skeleton);
55 void step(Skeleton3D *skeleton, float dt = 1.f);
56
62 bool solveChain(Skeleton3D *skeleton, int rootBoneId, int tipBoneId);
64 void stepChain(Skeleton3D *skeleton, int rootBoneId, int tipBoneId, float dt = 1.f);
65
71 void setPole(float x, float y, float z, float weight);
73 void clearPole();
75 bool hasPole() const;
77 float getPoleWeight() const;
78
84 void setTipRotation(int boneId, float yaw, float pitch, float weight);
86 void clearTipRotation();
88 float getTipRotationWeight() const;
89
91 int getTraceSize() const;
93 void clearTrace();
94
95private:
96 bool solveChainImpl(Skeleton3D *skeleton, int rootBoneId, int tipBoneId,
98 void applyTipRotation(Skeleton3D *skeleton);
99
100 ::ik::solver3d solver_;
101 bool keepTrace_ = false;
102 int maxIterations_ = 16;
103 float tolerance_ = 1e-3f;
104 float force_ = 0.f;
105 float influence_ = 1.f;
106
107 bool usePole_ = false;
108 ::ik::vec3 pole_{};
109 float poleWeight_ = 1.f;
110
111 int tipBoneId_ = -1;
112 float tipYaw_ = 0.f;
113 float tipPitch_ = 0.f;
114 float tipRotWeight_ = 0.f;
115};
116
117} // namespace eve::ik
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
float z
Definition AnimClip.cpp:738
#define EVENGINE_API_FOUNDATION
每个链接组(link group)各自的导出宏。
Definition Export.h:106
const SquirrelValueOptions & options
int iterations
Definition TreeMesh.cpp:311
float step
Definition TreeMesh.cpp:314
Script-facing 3D skeleton + pose state (ik::skeleton3d + ik::ecs3d). Local angles are yaw/pitch in th...
Definition Skeleton3D.h:13
FABRIK solver for Skeleton3D. Script type: Solver3D.
Definition Solver3D.h:12
Solver3D(const Solver3D &)=delete
Solver3D()=default
Creates a 3D FABRIK solver with default tolerances.
~Solver3D()=default
Releases solver state.
Solver3D & operator=(const Solver3D &)=delete
Options shared by the chain-scoped FABRIK solve used by Solver2D / Solver3D. These mirror the knobs o...
Definition ChainSolver.h:18