externals
box2d
include
box2d
b2_rope.h
Go to the documentation of this file.
1
// MIT License
2
3
// Copyright (c) 2019 Erin Catto
4
5
// Permission is hereby granted, free of charge, to any person obtaining a copy
6
// of this software and associated documentation files (the "Software"), to deal
7
// in the Software without restriction, including without limitation the rights
8
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
// copies of the Software, and to permit persons to whom the Software is
10
// furnished to do so, subject to the following conditions:
11
12
// The above copyright notice and this permission notice shall be included in all
13
// copies or substantial portions of the Software.
14
15
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
// SOFTWARE.
22
23
#ifndef B2_ROPE_H
24
#define B2_ROPE_H
25
26
#include "
b2_api.h
"
27
#include "
b2_math.h
"
28
29
class
b2Draw
;
30
struct
b2RopeStretch
;
31
struct
b2RopeBend
;
32
33
enum
b2StretchingModel
34
{
35
b2_pbdStretchingModel
,
36
b2_xpbdStretchingModel
37
};
38
39
enum
b2BendingModel
40
{
41
b2_springAngleBendingModel
= 0,
42
b2_pbdAngleBendingModel
,
43
b2_xpbdAngleBendingModel
,
44
b2_pbdDistanceBendingModel
,
45
b2_pbdHeightBendingModel
,
46
b2_pbdTriangleBendingModel
47
};
48
50
struct
B2_API
b2RopeTuning
51
{
52
b2RopeTuning
()
53
{
54
stretchingModel =
b2_pbdStretchingModel
;
55
bendingModel =
b2_pbdAngleBendingModel
;
56
damping = 0.0f;
57
stretchStiffness = 1.0f;
58
bendStiffness = 0.5f;
59
bendHertz = 1.0f;
60
bendDamping = 0.0f;
61
isometric =
false
;
62
fixedEffectiveMass =
false
;
63
warmStart =
false
;
64
}
65
66
b2StretchingModel
stretchingModel
;
67
b2BendingModel
bendingModel
;
68
float
damping
;
69
float
stretchStiffness
;
70
float
stretchHertz
;
71
float
stretchDamping
;
72
float
bendStiffness
;
73
float
bendHertz
;
74
float
bendDamping
;
75
bool
isometric
;
76
bool
fixedEffectiveMass
;
77
bool
warmStart
;
78
};
79
81
struct
B2_API
b2RopeDef
82
{
83
b2RopeDef
()
84
{
85
position.SetZero();
86
vertices =
nullptr
;
87
count = 0;
88
masses =
nullptr
;
89
gravity.SetZero();
90
}
91
92
b2Vec2
position
;
93
b2Vec2
*
vertices
;
94
int32
count
;
95
float
*
masses
;
96
b2Vec2
gravity
;
97
b2RopeTuning
tuning
;
98
};
99
101
class
B2_API
b2Rope
102
{
103
public
:
104
b2Rope
();
105
~
b2Rope
();
106
108
void
Create(
const
b2RopeDef
& def);
109
111
void
SetTuning(
const
b2RopeTuning
& tuning);
112
114
void
Step(
float
timeStep,
int32
iterations,
const
b2Vec2
& position);
115
117
void
Reset(
const
b2Vec2
& position);
118
120
void
Draw(
b2Draw
* draw)
const
;
121
122
private
:
123
124
void
SolveStretch_PBD();
125
void
SolveStretch_XPBD(
float
dt);
126
void
SolveBend_PBD_Angle();
127
void
SolveBend_XPBD_Angle(
float
dt);
128
void
SolveBend_PBD_Distance();
129
void
SolveBend_PBD_Height();
130
void
SolveBend_PBD_Triangle();
131
void
ApplyBendForces(
float
dt);
132
133
b2Vec2
m_position
;
134
135
int32
m_count
;
136
int32
m_stretchCount
;
137
int32
m_bendCount
;
138
139
b2RopeStretch
*
m_stretchConstraints
;
140
b2RopeBend
*
m_bendConstraints
;
141
142
b2Vec2
*
m_bindPositions
;
143
b2Vec2
*
m_ps
;
144
b2Vec2
*
m_p0s
;
145
b2Vec2
*
m_vs
;
146
147
float
*
m_invMasses
;
148
b2Vec2
m_gravity
;
149
150
b2RopeTuning
m_tuning
;
151
};
152
153
#endif
b2RopeBend
Definition:
b2_rope.cpp:38
b2RopeTuning::bendingModel
b2BendingModel bendingModel
Definition:
b2_rope.h:67
b2Rope::m_bindPositions
b2Vec2 * m_bindPositions
Definition:
b2_rope.h:142
b2_pbdTriangleBendingModel
Definition:
b2_rope.h:46
B2_API
#define B2_API
Definition:
b2_api.h:49
b2Rope::m_bendConstraints
b2RopeBend * m_bendConstraints
Definition:
b2_rope.h:140
b2RopeTuning::bendDamping
float bendDamping
Definition:
b2_rope.h:74
b2RopeDef::masses
float * masses
Definition:
b2_rope.h:95
b2RopeDef::b2RopeDef
b2RopeDef()
Definition:
b2_rope.h:83
b2RopeTuning::stretchingModel
b2StretchingModel stretchingModel
Definition:
b2_rope.h:66
b2RopeStretch
Definition:
b2_rope.cpp:28
b2RopeTuning::stretchDamping
float stretchDamping
Definition:
b2_rope.h:71
b2Rope::m_gravity
b2Vec2 m_gravity
Definition:
b2_rope.h:148
b2RopeDef::gravity
b2Vec2 gravity
Definition:
b2_rope.h:96
b2_xpbdAngleBendingModel
Definition:
b2_rope.h:43
b2_pbdAngleBendingModel
Definition:
b2_rope.h:42
b2Vec2
A 2D column vector.
Definition:
b2_math.h:41
b2Rope::m_stretchCount
int32 m_stretchCount
Definition:
b2_rope.h:136
b2RopeTuning::damping
float damping
Definition:
b2_rope.h:68
int32
signed int int32
Definition:
b2_types.h:28
b2Rope::m_bendCount
int32 m_bendCount
Definition:
b2_rope.h:137
b2BendingModel
b2BendingModel
Definition:
b2_rope.h:39
b2Draw
Definition:
b2_draw.h:48
b2RopeTuning::b2RopeTuning
b2RopeTuning()
Definition:
b2_rope.h:52
b2_math.h
b2RopeTuning
Definition:
b2_rope.h:50
b2_api.h
b2RopeTuning::bendStiffness
float bendStiffness
Definition:
b2_rope.h:72
b2RopeDef::position
b2Vec2 position
Definition:
b2_rope.h:92
b2RopeTuning::isometric
bool isometric
Definition:
b2_rope.h:75
b2RopeDef::tuning
b2RopeTuning tuning
Definition:
b2_rope.h:97
b2StretchingModel
b2StretchingModel
Definition:
b2_rope.h:33
b2Rope::m_count
int32 m_count
Definition:
b2_rope.h:135
b2RopeDef::vertices
b2Vec2 * vertices
Definition:
b2_rope.h:93
b2RopeDef::count
int32 count
Definition:
b2_rope.h:94
b2_pbdHeightBendingModel
Definition:
b2_rope.h:45
b2RopeDef
Definition:
b2_rope.h:81
b2RopeTuning::warmStart
bool warmStart
Definition:
b2_rope.h:77
b2_springAngleBendingModel
Definition:
b2_rope.h:41
b2_pbdStretchingModel
Definition:
b2_rope.h:35
b2Rope::m_ps
b2Vec2 * m_ps
Definition:
b2_rope.h:143
b2Rope::m_tuning
b2RopeTuning m_tuning
Definition:
b2_rope.h:150
b2_xpbdStretchingModel
Definition:
b2_rope.h:36
b2Rope::m_position
b2Vec2 m_position
Definition:
b2_rope.h:133
b2Rope::m_invMasses
float * m_invMasses
Definition:
b2_rope.h:147
b2Rope::m_p0s
b2Vec2 * m_p0s
Definition:
b2_rope.h:144
b2_pbdDistanceBendingModel
Definition:
b2_rope.h:44
b2Rope::m_stretchConstraints
b2RopeStretch * m_stretchConstraints
Definition:
b2_rope.h:139
b2Rope
Definition:
b2_rope.h:101
b2RopeTuning::fixedEffectiveMass
bool fixedEffectiveMass
Definition:
b2_rope.h:76
b2RopeTuning::bendHertz
float bendHertz
Definition:
b2_rope.h:73
b2RopeTuning::stretchStiffness
float stretchStiffness
Definition:
b2_rope.h:69
b2RopeTuning::stretchHertz
float stretchHertz
Definition:
b2_rope.h:70
b2Rope::m_vs
b2Vec2 * m_vs
Definition:
b2_rope.h:145
mvsim
Author(s):
autogenerated on Tue Jul 4 2023 03:08:19