Creates and controls Bullet constraints between Defold rigid bodies. A
constraint belongs to the supplied world and is destroyed automatically
with either body, with the world, or when the module is finalized. It is
temporarily removed from the native world while either linked body is
disabled and is restored when both bodies are enabled again. Dropping its
Lua userdata does not destroy the native constraint; call destroy for
early release.
Creator positions and all other linear values use Defold units and are
converted with physics.scale. Angles are radians. Axes are one-based in
Lua: axes 1-3 are linear and axes 4-6 are angular. Mutating functions cannot
be called while the physics world is stepping. Floating-point and vector
inputs must be finite. Axis vectors must be non-zero and are normalized.
Input rotations must be finite, non-zero quaternions and are normalized by
the binding.
CONSTRAINT_TYPE_* values identify the concrete constraint exposed by this
binding. This deliberately distinguishes universal, hinge2, and spring 6-DOF
constraints independently of Bullet's internal constraint type hierarchy.
Version: beta
| TYPES | |
|---|---|
| btTypedConstraint | Bullet typed constraint |
| RECORDS | |
|---|---|
| bullet3d.constraint.anchor_axes_params | Universal and hinge2 constraint parameters |
| bullet3d.constraint.cone_twist_params | Cone-twist constraint parameters |
| bullet3d.constraint.generic_6dof_params | Generic 6-DOF constraint parameters |
| bullet3d.constraint.generic_6dof_spring_params | Generic spring 6-DOF constraint parameters |
| bullet3d.constraint.hinge_params | Hinge constraint parameters |
| bullet3d.constraint.point_to_point_params | Point-to-point constraint parameters |
| bullet3d.constraint.slider_params | Slider constraint parameters |
| ENUMS | |
|---|---|
| bullet3d.constraint.CONSTRAINT_TYPE | Constraint types |
Universal and hinge2 constraint parameters
FIELDS
anchor |
vector3 |
world-space anchor |
axis1 |
vector3 |
first non-zero world-space axis |
axis2 |
vector3 |
second non-zero world-space axis, orthogonal to axis1 |
[collide_connected] |
boolean |
whether connected bodies can collide; defaults to false |
The frame-B fields are required for a two-body constraint.
FIELDS
frame_a_position |
vector3 |
local body-A frame position |
frame_a_rotation |
quaternion |
local body-A frame rotation |
[frame_b_position] |
vector3 |
local body-B frame position |
[frame_b_rotation] |
quaternion |
local body-B frame rotation |
[angular_only] |
boolean |
whether to constrain angular motion only |
[collide_connected] |
boolean |
whether connected bodies can collide; defaults to false |
The frame-B fields are required for a two-body constraint.
FIELDS
frame_a_position |
vector3 |
local body-A frame position |
frame_a_rotation |
quaternion |
local body-A frame rotation |
[frame_b_position] |
vector3 |
local body-B frame position |
[frame_b_rotation] |
quaternion |
local body-B frame rotation |
[collide_connected] |
boolean |
whether connected bodies can collide; defaults to false |
Generic spring 6-DOF constraint parameters
FIELDS
frame_a_position |
vector3 |
local body-A frame position |
frame_a_rotation |
quaternion |
local body-A frame rotation |
frame_b_position |
vector3 |
local body-B frame position |
frame_b_rotation |
quaternion |
local body-B frame rotation |
[collide_connected] |
boolean |
whether connected bodies can collide; defaults to false |
The frame-B fields are required for a two-body constraint.
FIELDS
frame_a_position |
vector3 |
local body-A frame position |
frame_a_rotation |
quaternion |
local body-A frame rotation |
[frame_b_position] |
vector3 |
local body-B frame position |
[frame_b_rotation] |
quaternion |
local body-B frame rotation |
[use_reference_frame_a] |
boolean |
whether angular calculations reference frame A |
[angular_only] |
boolean |
whether to constrain angular motion only |
[collide_connected] |
boolean |
whether connected bodies can collide; defaults to false |
pivot_b is required for a two-body constraint. For a one-body constraint,
it is an optional world-space anchor.
FIELDS
pivot_a |
vector3 |
local body-A pivot |
[pivot_b] |
vector3 |
local body-B pivot or world-space anchor |
[collide_connected] |
boolean |
whether connected bodies can collide; defaults to false |
The frame-B fields are required for a two-body constraint.
FIELDS
frame_a_position |
vector3 |
local body-A frame position |
frame_a_rotation |
quaternion |
local body-A frame rotation |
[frame_b_position] |
vector3 |
local body-B frame position |
[frame_b_rotation] |
quaternion |
local body-B frame rotation |
[use_linear_reference_frame_a] |
boolean |
whether linear calculations reference frame A |
[collide_connected] |
boolean |
whether connected bodies can collide; defaults to false |
bullet3d.constraint.CONSTRAINT_TYPE: integer
Constraint types
VALUES
bullet3d.constraint.create_cone_twist(body_a:btRigidBody, body_b:btRigidBody|nil, params:bullet3d.constraint.cone_twist_params)→constraint:btTypedConstraint
The world is derived from body_a.
PARAMETERS
body_a |
btRigidBody |
first body |
body_b |
btRigidBodynil |
second body or world |
params |
bullet3d.constraint.cone_twist_params |
local frames and options |
RETURNS
constraint |
btTypedConstraint |
cone-twist constraint |
bullet3d.constraint.create_generic_6dof(body_a:btRigidBody, body_b:btRigidBody|nil, params:bullet3d.constraint.generic_6dof_params)→constraint:btTypedConstraint
The params table requires local frame A and, for a two-body constraint,
local frame B. It optionally accepts collide_connected. The world is
derived from body_a. The active 6-DOF solver ignores its legacy
linear-reference-frame selector, so that field is rejected rather than
silently accepted.
PARAMETERS
body_a |
btRigidBody |
first body |
body_b |
btRigidBodynil |
second body or world |
params |
bullet3d.constraint.generic_6dof_params |
local frames and options |
RETURNS
constraint |
btTypedConstraint |
generic 6-DOF constraint |
bullet3d.constraint.create_generic_6dof_spring(body_a:btRigidBody, body_b:btRigidBody, params:bullet3d.constraint.generic_6dof_spring_params)→constraint:btTypedConstraint
Both bodies and both local frames are required. The params table optionally
accepts collide_connected. The world is derived from body_a. The active
spring 6-DOF solver ignores its legacy linear-reference-frame selector, so
that field is rejected rather than silently accepted.
PARAMETERS
body_a |
btRigidBody |
first body |
body_b |
btRigidBody |
second body |
params |
bullet3d.constraint.generic_6dof_spring_params |
local frames and options |
RETURNS
constraint |
btTypedConstraint |
spring 6-DOF constraint |
EXAMPLES
Create a spring that moves along its first linear axis:function init(self)
local body_a = bullet3d.get_rigid_body("/body_a#collisionobject")
local body_b = bullet3d.get_rigid_body("/body_b#collisionobject")
self.spring = bullet3d.constraint.create_generic_6dof_spring(body_a, body_b, {
frame_a_position = vmath.vector3(),
frame_a_rotation = vmath.quat(),
frame_b_position = vmath.vector3(),
frame_b_rotation = vmath.quat(),
})
bullet3d.constraint.set_limit(self.spring, 1, -1, 1)
bullet3d.constraint.enable_spring(self.spring, 1, true)
bullet3d.constraint.set_spring_stiffness(self.spring, 1, 20)
bullet3d.constraint.set_spring_damping(self.spring, 1, 0.5)
bullet3d.constraint.set_spring_equilibrium_point(self.spring, 1, 0)
end
function final(self)
if self.spring and bullet3d.constraint.is_valid(self.spring) then
bullet3d.constraint.destroy(self.spring)
end
end
bullet3d.constraint.create_hinge(body_a:btRigidBody, body_b:btRigidBody|nil, params:bullet3d.constraint.hinge_params)→constraint:btTypedConstraint
The world is derived from body_a.
PARAMETERS
body_a |
btRigidBody |
first body |
body_b |
btRigidBodynil |
second body or world |
params |
bullet3d.constraint.hinge_params |
local frames and options |
RETURNS
constraint |
btTypedConstraint |
hinge constraint |
EXAMPLES
Create a motorized hinge with a 90-degree range:function init(self)
local body_a = bullet3d.get_rigid_body("/door#collisionobject")
local body_b = bullet3d.get_rigid_body("/frame#collisionobject")
self.hinge = bullet3d.constraint.create_hinge(body_a, body_b, {
frame_a_position = vmath.vector3(-0.5, 0, 0),
frame_a_rotation = vmath.quat(),
frame_b_position = vmath.vector3(0.5, 0, 0),
frame_b_rotation = vmath.quat(),
})
bullet3d.constraint.set_hinge_limits(self.hinge, -math.pi / 4, math.pi / 4)
bullet3d.constraint.set_hinge_motor(self.hinge, true, 1.5, 2.5)
end
function final(self)
if self.hinge and bullet3d.constraint.is_valid(self.hinge) then
bullet3d.constraint.destroy(self.hinge)
end
end
bullet3d.constraint.create_hinge2(body_a:btRigidBody, body_b:btRigidBody, params:bullet3d.constraint.anchor_axes_params)→constraint:btTypedConstraint
Both bodies are required. Its initial linear suspension travel is one Defold
unit in either direction. The world is derived from body_a.
PARAMETERS
body_a |
btRigidBody |
first body |
body_b |
btRigidBody |
second body |
params |
bullet3d.constraint.anchor_axes_params |
anchor, axes, and options |
RETURNS
constraint |
btTypedConstraint |
hinge2 constraint |
bullet3d.constraint.create_point_to_point(body_a:btRigidBody, body_b:btRigidBody|nil, params:bullet3d.constraint.point_to_point_params)→constraint:btTypedConstraint
The world is derived from body_a; both bodies must belong to that same world.
PARAMETERS
body_a |
btRigidBody |
first body |
body_b |
btRigidBodynil |
second body or world |
params |
bullet3d.constraint.point_to_point_params |
pivots and options |
RETURNS
constraint |
btTypedConstraint |
point-to-point constraint |
EXAMPLES
Join two bodies at matching local pivots and explicitly destroy the constraint when the script is finalized:function init(self)
local body_a = bullet3d.get_rigid_body("/body_a#collisionobject")
local body_b = bullet3d.get_rigid_body("/body_b#collisionobject")
self.constraint = bullet3d.constraint.create_point_to_point(body_a, body_b, {
pivot_a = vmath.vector3(0.5, 0, 0),
pivot_b = vmath.vector3(-0.5, 0, 0),
})
end
function final(self)
if self.constraint and bullet3d.constraint.is_valid(self.constraint) then
bullet3d.constraint.destroy(self.constraint)
end
end
bullet3d.constraint.create_slider(body_a:btRigidBody, body_b:btRigidBody|nil, params:bullet3d.constraint.slider_params)→constraint:btTypedConstraint
The world is derived from body_a.
PARAMETERS
body_a |
btRigidBody |
first body |
body_b |
btRigidBodynil |
second body or world |
params |
bullet3d.constraint.slider_params |
local frames and options |
RETURNS
constraint |
btTypedConstraint |
slider constraint |
bullet3d.constraint.create_universal(body_a:btRigidBody, body_b:btRigidBody, params:bullet3d.constraint.anchor_axes_params)→constraint:btTypedConstraint
Both bodies are required. The world is derived from body_a.
PARAMETERS
body_a |
btRigidBody |
first body |
body_b |
btRigidBody |
second body |
params |
bullet3d.constraint.anchor_axes_params |
anchor, axes, and options |
RETURNS
constraint |
btTypedConstraint |
universal constraint |
bullet3d.constraint.destroy(constraint:btTypedConstraint)
Destroy a constraint
PARAMETERS
constraint |
btTypedConstraint |
constraint |
bullet3d.constraint.enable_cone_twist_motor(constraint:btTypedConstraint, enabled:boolean)
Enable or disable the cone-twist motor
PARAMETERS
constraint |
btTypedConstraint |
cone-twist constraint |
enabled |
boolean |
motor state |
bullet3d.constraint.enable_spring(constraint:btTypedConstraint, axis:integer, enabled:boolean)
Enable or disable a spring axis
PARAMETERS
constraint |
btTypedConstraint |
spring 6-DOF or hinge2 constraint |
axis |
integer |
one-based axis from 1 to 6 |
enabled |
boolean |
spring state |
bullet3d.constraint.get_6dof_angle(constraint:btTypedConstraint, axis:integer)→angle:number
Get a current 6-DOF angle
PARAMETERS
constraint |
btTypedConstraint |
6-DOF-derived constraint |
axis |
integer |
one-based angular-axis index from 1 to 3 |
RETURNS
angle |
number |
current angle in radians |
bullet3d.constraint.get_6dof_axis(constraint:btTypedConstraint, axis:integer)→direction:vector3
Get a current 6-DOF angular axis
PARAMETERS
constraint |
btTypedConstraint |
6-DOF-derived constraint |
axis |
integer |
one-based angular-axis index from 1 to 3 |
RETURNS
direction |
vector3 |
world-space unit axis |
bullet3d.constraint.get_6dof_motor(constraint:btTypedConstraint, axis:integer)→(enabled:boolean, target_velocity:number, max_force:number, bounce:number)
Axes 1-3 are linear and axes 4-6 are angular. Generic 6-DOF, generic spring
6-DOF, and universal constraints support bounce only on angular axes; hinge2
supports it on every axis. Linear target velocity uses Defold units per
second and angular target velocity uses radians per second. max_force is a
force for linear axes and a torque in Defold squared units for angular axes.
PARAMETERS
constraint |
btTypedConstraint |
6-DOF-derived constraint |
axis |
integer |
one-based axis from 1 to 6 |
RETURNS
enabled |
boolean |
motor state |
target_velocity |
number |
linear or angular target velocity |
max_force |
number |
maximum motor force for linear axes or torque for angular axes |
bounce |
number |
bounce from 0 to 1 |
bullet3d.constraint.get_6dof_position(constraint:btTypedConstraint, axis:integer)→position:number
Get a current 6-DOF linear position
PARAMETERS
constraint |
btTypedConstraint |
6-DOF-derived constraint |
axis |
integer |
one-based linear-axis index from 1 to 3 |
RETURNS
position |
number |
relative position in Defold units |
bullet3d.constraint.get_anchors(constraint:btTypedConstraint)→(anchor_a:vector3, anchor_b:vector3)
Get universal or hinge2 anchors
PARAMETERS
constraint |
btTypedConstraint |
universal or hinge2 constraint |
RETURNS
anchor_a |
vector3 |
world-space anchor on body A |
anchor_b |
vector3 |
world-space anchor on body B |
bullet3d.constraint.get_angles(constraint:btTypedConstraint)→(angle_1:number, angle_2:number)
Get universal or hinge2 angles
PARAMETERS
constraint |
btTypedConstraint |
universal or hinge2 constraint |
RETURNS
angle_1 |
number |
first angle in radians |
angle_2 |
number |
second angle in radians |
bullet3d.constraint.get_axes(constraint:btTypedConstraint)→(axis_1:vector3, axis_2:vector3)
Get universal or hinge2 axes
PARAMETERS
constraint |
btTypedConstraint |
universal or hinge2 constraint |
RETURNS
axis_1 |
vector3 |
first world-space unit axis |
axis_2 |
vector3 |
second world-space unit axis |
bullet3d.constraint.get_body_a(constraint:btTypedConstraint)→body:btRigidBody
Get the first linked body
PARAMETERS
constraint |
btTypedConstraint |
constraint |
RETURNS
body |
btRigidBody |
first body |
bullet3d.constraint.get_body_b(constraint:btTypedConstraint)→body:btRigidBody|nil
Get the second linked body
PARAMETERS
constraint |
btTypedConstraint |
constraint |
RETURNS
body |
btRigidBodynil |
second body, or nil for a world constraint |
bullet3d.constraint.get_collide_connected(constraint:btTypedConstraint)→collide:boolean
Get whether connected bodies can collide
PARAMETERS
constraint |
btTypedConstraint |
constraint |
RETURNS
collide |
boolean |
whether connected bodies can collide |
bullet3d.constraint.get_cone_twist_limits(constraint:btTypedConstraint)→(swing_span_1:number, swing_span_2:number, twist_span:number)
Get cone-twist angular spans
PARAMETERS
constraint |
btTypedConstraint |
cone-twist constraint |
RETURNS
swing_span_1 |
number |
first swing span in radians |
swing_span_2 |
number |
second swing span in radians |
twist_span |
number |
twist span in radians |
bullet3d.constraint.get_frame_a(constraint:btTypedConstraint)→(position:vector3, rotation:quaternion)
Supported constraint types are hinge, cone-twist, generic 6-DOF, generic
spring 6-DOF, slider, universal, and hinge2. Point-to-point constraints use
get_pivots instead.
Returns position and rotation. For one-body generic 6-DOF and slider
constraints this is the user-body frame, despite Bullet storing it as its
native frame B.
PARAMETERS
constraint |
btTypedConstraint |
framed constraint |
RETURNS
position |
vector3 |
local position |
rotation |
quaternion |
local rotation |
bullet3d.constraint.get_frame_b(constraint:btTypedConstraint)→(position:vector3, rotation:quaternion)
Supports the same constraint types as get_frame_a. For a one-body
constraint, this is the frame attached to the fixed world body.
PARAMETERS
constraint |
btTypedConstraint |
framed constraint |
RETURNS
position |
vector3 |
local position or world frame position |
rotation |
quaternion |
local rotation or world frame rotation |
bullet3d.constraint.get_hinge_angle(constraint:btTypedConstraint)→angle:number
Get the current hinge angle
PARAMETERS
constraint |
btTypedConstraint |
hinge constraint |
RETURNS
angle |
number |
angle in radians |
bullet3d.constraint.get_hinge_limits(constraint:btTypedConstraint)→(lower:number, upper:number)
Get hinge angular limits
PARAMETERS
constraint |
btTypedConstraint |
hinge constraint |
RETURNS
lower |
number |
lower angle in radians |
upper |
number |
upper angle in radians |
bullet3d.constraint.get_hinge_motor(constraint:btTypedConstraint)→(enabled:boolean, target_velocity:number, max_impulse:number)
Get hinge motor settings
PARAMETERS
constraint |
btTypedConstraint |
hinge constraint |
RETURNS
enabled |
boolean |
motor state |
target_velocity |
number |
angular target velocity in radians per second |
max_impulse |
number |
maximum angular motor impulse in Defold squared units |
bullet3d.constraint.get_limit(constraint:btTypedConstraint, axis:integer)→(lower:number, upper:number)
Axes 1-3 return linear limits in Defold units. Axes 4-6 return angular limits in radians.
PARAMETERS
constraint |
btTypedConstraint |
6-DOF-derived constraint |
axis |
integer |
one-based axis from 1 to 6 |
RETURNS
lower |
number |
lower limit |
upper |
number |
upper limit |
bullet3d.constraint.get_pivots(constraint:btTypedConstraint)→(pivot_a:vector3, pivot_b:vector3)
Get point-to-point pivots
PARAMETERS
constraint |
btTypedConstraint |
point-to-point constraint |
RETURNS
pivot_a |
vector3 |
local body-A pivot |
pivot_b |
vector3 |
local body-B pivot or world anchor |
bullet3d.constraint.get_slider_limits(constraint:btTypedConstraint)→(lower_linear:number, upper_linear:number, lower_angular:number, upper_angular:number)
Get slider limits
PARAMETERS
constraint |
btTypedConstraint |
slider constraint |
RETURNS
lower_linear |
number |
lower linear limit in Defold units |
upper_linear |
number |
upper linear limit in Defold units |
lower_angular |
number |
lower angular limit in radians |
upper_angular |
number |
upper angular limit in radians |
bullet3d.constraint.get_slider_motor(constraint:btTypedConstraint, motor:string)→(enabled:boolean, target_velocity:number, max_force:number)
The linear motor uses Defold units per second and maximum force. The angular motor uses radians per second and maximum torque in Defold squared units.
PARAMETERS
constraint |
btTypedConstraint |
slider constraint |
motor |
string |
linear or angular
|
RETURNS
enabled |
boolean |
motor state |
target_velocity |
number |
linear or angular target velocity |
max_force |
number |
maximum linear force or angular torque |
bullet3d.constraint.get_slider_position(constraint:btTypedConstraint)→position:number
Get the current slider position
PARAMETERS
constraint |
btTypedConstraint |
slider constraint |
RETURNS
position |
number |
current linear position in Defold units |
bullet3d.constraint.get_twist_angle(constraint:btTypedConstraint)→angle:number
Get the current cone-twist twist angle
PARAMETERS
constraint |
btTypedConstraint |
cone-twist constraint |
RETURNS
angle |
number |
twist angle in radians |
bullet3d.constraint.get_type(constraint:btTypedConstraint)→type:bullet3d.constraint.CONSTRAINT_TYPE
Get the constraint type
PARAMETERS
constraint |
btTypedConstraint |
constraint |
RETURNS
type |
bullet3d.constraint.CONSTRAINT_TYPE |
constraint type |
bullet3d.constraint.get_type_name(constraint:btTypedConstraint)→name:string
Returns a stable lowercase diagnostic name such as "hinge" or
"generic_6dof_spring".
PARAMETERS
constraint |
btTypedConstraint |
constraint |
RETURNS
name |
string |
constraint type name |
bullet3d.constraint.get_use_linear_reference_frame_a(constraint:btTypedConstraint)→use_frame_a:boolean
Get the slider linear reference-frame choice
PARAMETERS
constraint |
btTypedConstraint |
slider constraint |
RETURNS
use_frame_a |
boolean |
true when linear calculations reference frame A |
bullet3d.constraint.get_world(constraint:btTypedConstraint)→world:btDiscreteDynamicsWorld
Get the owning world
PARAMETERS
constraint |
btTypedConstraint |
constraint |
RETURNS
world |
btDiscreteDynamicsWorld |
owning world |
bullet3d.constraint.is_active(constraint:btTypedConstraint)→active:boolean
Test whether a constraint is active in its world
PARAMETERS
constraint |
btTypedConstraint |
constraint |
RETURNS
active |
boolean |
false while a linked body is disabled |
bullet3d.constraint.is_angular_only(constraint:btTypedConstraint)→angular_only:boolean
Test angular-only mode
PARAMETERS
constraint |
btTypedConstraint |
hinge or cone-twist constraint |
RETURNS
angular_only |
boolean |
angular-only state |
bullet3d.constraint.is_limited(constraint:btTypedConstraint, axis:integer)→limited:boolean
Both a ranged and a locked axis are considered limited; a free axis is not.
PARAMETERS
constraint |
btTypedConstraint |
6-DOF-derived constraint |
axis |
integer |
one-based axis from 1 to 6 |
RETURNS
limited |
boolean |
limit state |
bullet3d.constraint.is_past_swing_limit(constraint:btTypedConstraint)→past_limit:boolean
Test whether a cone-twist is past its swing limit
PARAMETERS
constraint |
btTypedConstraint |
cone-twist constraint |
RETURNS
past_limit |
boolean |
swing-limit state |
bullet3d.constraint.is_valid(constraint:btTypedConstraint)→valid:boolean
Test whether a constraint handle is valid
PARAMETERS
constraint |
btTypedConstraint |
constraint handle |
RETURNS
valid |
boolean |
true while the native constraint exists |
bullet3d.constraint.set_6dof_motor(constraint:btTypedConstraint, axis:integer, enabled:boolean, target_velocity:number, max_force:number, [bounce:number|nil])
Linear and angular values use the units described by get_6dof_motor.
PARAMETERS
constraint |
btTypedConstraint |
6-DOF-derived constraint |
axis |
integer |
one-based axis from 1 to 6 |
enabled |
boolean |
motor state |
target_velocity |
number |
linear or angular target velocity |
max_force |
number |
non-negative maximum motor force for linear axes or torque for angular axes |
[bounce] |
numbernil |
optional bounce from 0 to 1; defaults to 0
|
bullet3d.constraint.set_angular_only(constraint:btTypedConstraint, angular_only:boolean)
Set angular-only mode
PARAMETERS
constraint |
btTypedConstraint |
hinge or cone-twist constraint |
angular_only |
boolean |
angular-only state |
bullet3d.constraint.set_cone_twist_limits(constraint:btTypedConstraint, swing_span_1:number, swing_span_2:number, twist_span:number, [softness:number|nil], [bias:number|nil], [relaxation:number|nil])
Set cone-twist angular spans
PARAMETERS
constraint |
btTypedConstraint |
cone-twist constraint |
swing_span_1 |
number |
non-negative first swing span in radians |
swing_span_2 |
number |
non-negative second swing span in radians |
twist_span |
number |
non-negative twist span in radians |
[softness] |
numbernil |
optional softness from 0 to 1; defaults to 1
|
[bias] |
numbernil |
optional bias from 0 to 1; defaults to 0.3
|
[relaxation] |
numbernil |
optional relaxation from 0 to 1; defaults to 1
|
bullet3d.constraint.set_cone_twist_motor_target(constraint:btTypedConstraint, target:quaternion, [constraint_space:boolean|nil])
By default, target is the desired rotation of body A relative to body B.
With constraint_space set, it is the desired rotation of frame A relative
to frame B in constraint space.
PARAMETERS
constraint |
btTypedConstraint |
cone-twist constraint |
target |
quaternion |
finite, non-zero target orientation; normalized by the binding |
[constraint_space] |
booleannil |
optional target-is-in-constraint-space flag; defaults to false
|
bullet3d.constraint.set_frame_a(constraint:btTypedConstraint, position:vector3, rotation:quaternion)
Frame mutation is supported for hinge, generic 6-DOF, generic spring 6-DOF, and slider constraints. Cone-twist, universal, and hinge2 frames are read-only through this API.
PARAMETERS
constraint |
btTypedConstraint |
mutable framed constraint |
position |
vector3 |
finite local position |
rotation |
quaternion |
finite, non-zero local rotation; normalized by the binding |
bullet3d.constraint.set_frame_b(constraint:btTypedConstraint, position:vector3, rotation:quaternion)
Supports the same constraint types as set_frame_a. For a one-body
constraint, this changes the frame attached to the fixed world body.
PARAMETERS
constraint |
btTypedConstraint |
mutable framed constraint |
position |
vector3 |
finite local position or world frame position |
rotation |
quaternion |
finite, non-zero local or world frame rotation; normalized by the binding |
bullet3d.constraint.set_hinge_axis(constraint:btTypedConstraint, axis:vector3)
This function only supports hinges attached to the world. For a two-body
hinge, change both local frames with set_frame_a and set_frame_b.
PARAMETERS
constraint |
btTypedConstraint |
one-body hinge constraint |
axis |
vector3 |
non-zero axis in body-A space |
bullet3d.constraint.set_hinge_limits(constraint:btTypedConstraint, lower:number, upper:number, [bias:number|nil], [relaxation:number|nil])
Set hinge angular limits
PARAMETERS
constraint |
btTypedConstraint |
hinge constraint |
lower |
number |
lower angle in radians |
upper |
number |
upper angle in radians |
[bias] |
numbernil |
optional limit bias from 0 to 1; defaults to 0.3
|
[relaxation] |
numbernil |
optional relaxation from 0 to 1; defaults to 1
|
bullet3d.constraint.set_hinge_motor(constraint:btTypedConstraint, enabled:boolean, target_velocity:number, max_impulse:number)
Set hinge motor settings
PARAMETERS
constraint |
btTypedConstraint |
hinge constraint |
enabled |
boolean |
motor state |
target_velocity |
number |
angular target velocity in radians per second |
max_impulse |
number |
non-negative maximum angular motor impulse in Defold squared units |
bullet3d.constraint.set_hinge_motor_target(constraint:btTypedConstraint, target_angle:number, time_step:number)
Set a hinge motor angle target
PARAMETERS
constraint |
btTypedConstraint |
hinge constraint |
target_angle |
number |
target angle in radians |
time_step |
number |
positive step duration in seconds |
bullet3d.constraint.set_limit(constraint:btTypedConstraint, axis:integer, lower:number, upper:number)
Axes 1-3 use Defold units and axes 4-6 use radians. A lower value less than the upper value creates a limited range, equal values lock the axis, and a lower value greater than the upper value makes the axis free.
PARAMETERS
constraint |
btTypedConstraint |
6-DOF-derived constraint |
axis |
integer |
one-based axis from 1 to 6 |
lower |
number |
lower limit |
upper |
number |
upper limit |
bullet3d.constraint.set_pivots(constraint:btTypedConstraint, pivot_a:vector3, pivot_b:vector3)
Set point-to-point pivots
PARAMETERS
constraint |
btTypedConstraint |
point-to-point constraint |
pivot_a |
vector3 |
local body-A pivot |
pivot_b |
vector3 |
local body-B pivot or world anchor |
bullet3d.constraint.set_slider_limits(constraint:btTypedConstraint, lower_linear:number, upper_linear:number, lower_angular:number, upper_angular:number)
Each lower/upper pair follows Bullet's limit convention: lower less than upper creates a limited range, equal values lock that axis, and lower greater than upper makes it free. Bullet normalizes the angular limits.
PARAMETERS
constraint |
btTypedConstraint |
slider constraint |
lower_linear |
number |
lower linear limit in Defold units |
upper_linear |
number |
upper linear limit in Defold units |
lower_angular |
number |
lower angular limit in radians |
upper_angular |
number |
upper angular limit in radians |
bullet3d.constraint.set_slider_motor(constraint:btTypedConstraint, motor:string, enabled:boolean, target_velocity:number, max_force:number)
Linear and angular values use the units described by get_slider_motor.
PARAMETERS
constraint |
btTypedConstraint |
slider constraint |
motor |
string |
linear or angular
|
enabled |
boolean |
motor state |
target_velocity |
number |
linear or angular target velocity |
max_force |
number |
non-negative maximum linear force or angular torque |
bullet3d.constraint.set_spring_damping(constraint:btTypedConstraint, axis:integer, damping:number)
Generic spring 6-DOF constraints use a scale-independent damping factor from
0 to 1, where 1 means no damping. Hinge2 constraints use a damping coefficient
where 0 means no damping and any non-negative value is accepted. Hinge2
angular damping is automatically converted using physics.scale squared.
PARAMETERS
constraint |
btTypedConstraint |
spring 6-DOF or hinge2 constraint |
axis |
integer |
one-based axis from 1 to 6 |
damping |
number |
damping value in the range required by the constraint type |
bullet3d.constraint.set_spring_equilibrium_point(constraint:btTypedConstraint, [axis:integer|nil], [value:number|nil])
With no axis, captures all current transforms. With an axis and no value, captures that axis. Linear values use Defold units and angular values use radians.
PARAMETERS
constraint |
btTypedConstraint |
spring 6-DOF or hinge2 constraint |
[axis] |
integernil |
optional one-based axis from 1 to 6 |
[value] |
numbernil |
optional explicit equilibrium value |
bullet3d.constraint.set_spring_stiffness(constraint:btTypedConstraint, axis:integer, stiffness:number)
Linear stiffness values are independent of physics.scale. Angular
stiffness values are automatically converted using physics.scale squared.
PARAMETERS
constraint |
btTypedConstraint |
spring 6-DOF or hinge2 constraint |
axis |
integer |
one-based axis from 1 to 6 |
stiffness |
number |
non-negative stiffness |