载入中...
搜索中...
未找到
Solver2D.h
浏览该文件的文档.
1#pragma once
2
3#include "ik/ChainSolver.h"
4#include "ik/Skeleton2D.h"
5
6#include "ik.hpp"
7
8namespace eve::ik {
9
11class Solver2D {
12public:
13 Solver2D() = default;
14 ~Solver2D() = default;
15
16 Solver2D(const Solver2D &) = delete;
17 Solver2D &operator=(const Solver2D &) = 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 weight = 1.f);
35 int getTargetCount() const;
36
38 bool solve(Skeleton2D *skeleton);
39 void step(Skeleton2D *skeleton, float dt = 1.f);
40
46 bool solveChain(Skeleton2D *skeleton, int rootBoneId, int tipBoneId);
47 void stepChain(Skeleton2D *skeleton, int rootBoneId, int tipBoneId, float dt = 1.f);
48
49 int getTraceSize() const;
50 void clearTrace();
51
52private:
53 bool solveChainImpl(Skeleton2D *skeleton, int rootBoneId, int tipBoneId,
54 const detail::ChainOptions<2> &options);
55
56 ::ik::solver2d solver_;
57 bool keepTrace_ = false;
58 int maxIterations_ = 16;
59 float tolerance_ = 1e-3f;
60 float force_ = 0.f;
61 float influence_ = 1.f;
62};
63
64} // namespace eve::ik
int y
Definition Grass.cpp:135
int x
Definition Grass.cpp:135
int iterations
Definition TreeMesh.cpp:193
float step
Definition TreeMesh.cpp:196
Script-facing 2D skeleton + pose state (ik::skeleton2d + ik::ecs2d). Bone indices are stable after ea...
Definition Skeleton2D.h:12
FABRIK solver for Skeleton2D. Script type: Solver2D.
Definition Solver2D.h:11
int getMaxIterations() const
Definition Solver2D.cpp:24
int getTargetCount() const
Definition Solver2D.cpp:61
void setForce(float force)
Definition Solver2D.cpp:36
bool getKeepTrace() const
Definition Solver2D.cpp:14
void setMaxIterations(int iterations)
Definition Solver2D.cpp:16
~Solver2D()=default
void setTolerance(float tol)
Definition Solver2D.cpp:26
int getTraceSize() const
Definition Solver2D.cpp:160
void setKeepTrace(bool keep)
Definition Solver2D.cpp:9
Solver2D()=default
Solver2D & operator=(const Solver2D &)=delete
void setInfluence(float influence)
Overall pose blend: 0 = keep the input pose, 1 = full solve (default).
Definition Solver2D.cpp:43
float getForce() const
Definition Solver2D.cpp:41
void addTarget(int boneId, float x, float y, float weight=1.f)
Definition Solver2D.cpp:54
bool solve(Skeleton2D *skeleton)
Returns true if every target is within tolerance.
Definition Solver2D.cpp:65
bool solveChain(Skeleton2D *skeleton, int rootBoneId, int tipBoneId)
FABRIK solve restricted to the bone chain rootBoneId..tipBoneId. The chain root stays pinned and bone...
Definition Solver2D.cpp:104
void stepChain(Skeleton2D *skeleton, int rootBoneId, int tipBoneId, float dt=1.f)
Definition Solver2D.cpp:113
float getTolerance() const
Definition Solver2D.cpp:34
Solver2D(const Solver2D &)=delete
float getInfluence() const
Definition Solver2D.cpp:50
Options shared by the chain-scoped FABRIK solve used by Solver2D / Solver3D. These mirror the knobs o...
Definition ChainSolver.h:18