载入中...
搜索中...
未找到
Solver3D.h
浏览该文件的文档.
1#pragma once
2
3#include "ik/ChainSolver.h"
4#include "ik/Skeleton3D.h"
5
6#include "ik.hpp"
7
8namespace eve::ik {
9
11class Solver3D {
12public:
13 Solver3D() = default;
14 ~Solver3D() = default;
15
16 Solver3D(const Solver3D &) = delete;
17 Solver3D &operator=(const Solver3D &) = delete;
18
19 void setKeepTrace(bool keep);
20 bool getKeepTrace() const;
21
23 int getMaxIterations() const;
24 void setTolerance(float tol);
25 float getTolerance() const;
26 void setForce(float force);
27 float getForce() const;
28
30 void setInfluence(float influence);
31 float getInfluence() const;
32
33 void clearTargets();
34 void addTarget(int boneId, float x, float y, float z, float weight = 1.f);
35 int getTargetCount() const;
36
37 bool solve(Skeleton3D *skeleton);
38 void step(Skeleton3D *skeleton, float dt = 1.f);
39
45 bool solveChain(Skeleton3D *skeleton, int rootBoneId, int tipBoneId);
46 void stepChain(Skeleton3D *skeleton, int rootBoneId, int tipBoneId, float dt = 1.f);
47
53 void setPole(float x, float y, float z, float weight);
54 void clearPole();
55 bool hasPole() const;
56 float getPoleWeight() const;
57
63 void setTipRotation(int boneId, float yaw, float pitch, float weight);
64 void clearTipRotation();
65 float getTipRotationWeight() const;
66
67 int getTraceSize() const;
68 void clearTrace();
69
70private:
71 bool solveChainImpl(Skeleton3D *skeleton, int rootBoneId, int tipBoneId,
72 const detail::ChainOptions<3> &options);
73 void applyTipRotation(Skeleton3D *skeleton);
74
75 ::ik::solver3d solver_;
76 bool keepTrace_ = false;
77 int maxIterations_ = 16;
78 float tolerance_ = 1e-3f;
79 float force_ = 0.f;
80 float influence_ = 1.f;
81
82 bool usePole_ = false;
83 ::ik::vec3 pole_{};
84 float poleWeight_ = 1.f;
85
86 int tipBoneId_ = -1;
87 float tipYaw_ = 0.f;
88 float tipPitch_ = 0.f;
89 float tipRotWeight_ = 0.f;
90};
91
92} // namespace eve::ik
int y
Definition Grass.cpp:135
int z
Definition Grass.cpp:135
int x
Definition Grass.cpp:135
int iterations
Definition TreeMesh.cpp:193
float step
Definition TreeMesh.cpp:196
Script-facing 3D skeleton + pose state (ik::skeleton3d + ik::ecs3d). Local angles are yaw/pitch in th...
Definition Skeleton3D.h:11
FABRIK solver for Skeleton3D. Script type: Solver3D.
Definition Solver3D.h:11
void addTarget(int boneId, float x, float y, float z, float weight=1.f)
Definition Solver3D.cpp:54
void setTipRotation(int boneId, float yaw, float pitch, float weight)
Tip orientation override: after solving, blends the tip bone's local yaw/pitch toward the given angle...
Definition Solver3D.cpp:186
float getTipRotationWeight() const
Definition Solver3D.cpp:203
float getPoleWeight() const
Definition Solver3D.cpp:184
float getForce() const
Definition Solver3D.cpp:41
Solver3D(const Solver3D &)=delete
void setTolerance(float tol)
Definition Solver3D.cpp:26
void clearTipRotation()
Definition Solver3D.cpp:196
bool solve(Skeleton3D *skeleton)
Definition Solver3D.cpp:65
void setInfluence(float influence)
Overall pose blend: 0 = keep the input pose, 1 = full solve (default).
Definition Solver3D.cpp:43
int getMaxIterations() const
Definition Solver3D.cpp:24
void stepChain(Skeleton3D *skeleton, int rootBoneId, int tipBoneId, float dt=1.f)
Definition Solver3D.cpp:118
void setForce(float force)
Definition Solver3D.cpp:36
bool solveChain(Skeleton3D *skeleton, int rootBoneId, int tipBoneId)
FABRIK solve restricted to the bone chain rootBoneId..tipBoneId. The chain root stays pinned and bone...
Definition Solver3D.cpp:106
Solver3D()=default
~Solver3D()=default
float getInfluence() const
Definition Solver3D.cpp:50
bool hasPole() const
Definition Solver3D.cpp:182
void setMaxIterations(int iterations)
Definition Solver3D.cpp:16
Solver3D & operator=(const Solver3D &)=delete
int getTargetCount() const
Definition Solver3D.cpp:61
int getTraceSize() const
Definition Solver3D.cpp:238
bool getKeepTrace() const
Definition Solver3D.cpp:14
void setPole(float x, float y, float z, float weight)
Pole vector (magnet / hint): pulls the middle joints of a chain toward a point so the limb bends in t...
Definition Solver3D.cpp:171
float getTolerance() const
Definition Solver3D.cpp:34
void setKeepTrace(bool keep)
Definition Solver3D.cpp:9
Options shared by the chain-scoped FABRIK solve used by Solver2D / Solver3D. These mirror the knobs o...
Definition ChainSolver.h:18