BodyRigid Class
Inherits: | Body |
This class is used to simulate rigid bodies that move according to the rigid bodies dynamics.
BodyRigid Class
Members
static BodyRigid()
Constructor. Creates a rigid body with default properties.static BodyRigid(Object object)
Constructor. Creates a rigid body with default properties for a given object.Arguments
- Object object - Object approximated with the new rigid body.
void setAngularDamping(float damping)
Sets an angular damping of the body.Arguments
- float damping - Angular damping. If a negative value is provided, 0 will be used instead.
float getAngularDamping()
Returns the angular damping of the body.Return value
Angular damping.void setAngularScale(vec3 scale)
Sets a multiplier for the body's angular velocity per axis. If one of vec3 values is set to 0, movement along this axis will be restricted. For example, for 2D physics with movement restricted to a X axis, set the body's angular scale to (1,0,0).Arguments
- vec3 scale - Angular scale per axis, in world coordinates.
vec3 getAngularScale()
Returns a multiplier for the body's angular velocity per axis. If one of vec3 values is set to 0, movement along this axis will be restricted. For example, for 2D physics with movement restricted to a X axis, set the body's angular scale to (1,0,0).Return value
Angular scale per axis.void setAngularVelocity(vec3 velocity)
Sets an angular velocity of the body.Arguments
- vec3 velocity - Angular velocity in radians per second, in world coordinates.
vec3 getAngularVelocity()
Returns the current angular velocity of the body.Return value
Angular velocity in radians per second.void setCenterOfMass(vec3 center)
Sets coordinates of the center of mass of the body.Arguments
- vec3 center - Coordinates of the center of mass, in world coordinates.
vec3 getCenterOfMass()
Returns coordinates of the center of mass of the body.Return value
Coordinates of the center of mass.void setFreezable(int freezable)
Sets a value indicating if the body should not be simulated if both its linear and angular velocities are below "freeze" ones (see setFrozenLinearVelocity and setFrozenAngularVelocity functions).Arguments
- int freezable - Positive number to "freeze" the body when necessary; 0 for its physical state to be always updated.
int isFreezable()
Returns a value indicating if the object is not simulated if both its linear and angular velocities are below "freeze" ones (see setFrozenLinearVelocity and setFrozenAngularVelocityfunctions).Return value
Positive number if the body "freezes" when necessary; 0 if its physical state is always updated.void setFrozenAngularVelocity(float velocity)
Sets angular velocity threshold for freezing body simulation. If body angular velocity remains lower than this threshold during the number of Frozen frames (together with linear one), it stops to be updated.Arguments
- float velocity - "Freeze" angular velocity. If the value is lower than the engine.physics.setFrozenAngularVelocity one, it is overridden.
float getFrozenAngularVelocity()
Returns the current angular velocity threshold for freezing body simulation. If body angular velocity remains lower than this threshold during the number of Frozen frames (together with linear one), it stops to be updated.Return value
"Freeze" angular velocity.void setFrozenLinearVelocity(float velocity)
Sets linear velocity threshold for freezing body simulation. If body linear velocity remains lower than this threshold during the number of Frozen frames (together with angular one), it stops to be updated.Arguments
- float velocity - "Freeze" linear velocity. If the value is lower than the engine.physics.setFrozenLinearVelocity one, it is overridden.
float getFrozenLinearVelocity()
Returns the current linear velocity threshold for freezing body simulation. If body linear velocity remains lower than this threshold during the number of Frozen frames (together with angular one), it stops to be updated.Return value
"Freeze" linear velocity.float getIMass()
Returns the inverse mass of the body.Return value
Inverse mass of the body.void setInertia(mat3 inertia)
Sets an inertia tensor of the body. The inertia tensor describes the distribution of the mass over the body relative to the body's center of mass.Arguments
- mat3 inertia - Inertia tensor.
mat3 getInertia()
Returns the inertia tensor of the body.Return value
Inertia sensor of the body.mat3 getIWorldInertia()
Returns the inverse inertia tensor of the body, in the world coordinates.Return value
Inverse inertia tensor of the body, in the world coordinates.void setLinearDamping(float damping)
Sets a linear damping of the body.Arguments
- float damping - Linear damping. If a negative value is provided, 0 will be used instead.
float getLinearDamping()
Returns the linear damping of the body.Return value
Linear damping.void setLinearScale(vec3 scale)
Sets a multiplier for the body's linear velocity per axis. If one of vec3 values is set to 0, movement along this axis will be restricted. For example, for 2D physics with movement restricted to a X axis, set the body's linear scale to (0,1,1).Arguments
- vec3 scale - Linear scale per axis.
vec3 getLinearScale()
Returns a multiplier for the body's linear velocity per axis. If one of vec3 values is set to 0, movement along this axis will be restricted. For example, for 2D physics with movement restricted to a X axis, set the body's linear scale to (0,1,1).Return value
Linear scale per axis.void setLinearVelocity(vec3 velocity)
Sets a linear velocity of the body.Arguments
- vec3 velocity - Linear velocity in units per second, in world coordinates.
vec3 getLinearVelocity()
Returns the current linear velocity of the body.Return value
Linear velocity in units per second.void setMass(float mass)
Sets a mass of the body.Arguments
- float mass - Mass of the body.
float getMass()
Returns the body mass.Return value
Mass of the body.void setMaxAngularVelocity(float velocity)
Sets a maximum angular velocity of the body.Arguments
- float velocity - Maximum angular velocity in radians per second. If a negative value is provided, 0 will be used instead.
float getMaxAngularVelocity()
Returns the maximum angular velocity of the body.Return value
Maximum angular velocity, per second.void setMaxLinearVelocity(float velocity)
Sets a maximum linear velocity of the body.Arguments
- float velocity - Maximum linear velocity in units per second. If a negative value is provided, 0 will be used instead.
float getMaxLinearVelocity()
Returns the maximum linear velocity of the body.Return value
Maximum linear velocity in units per second.void setShapeBased(int based)
Sets a value indicating if mass and inertia of the body are bound to its shape properties or not.Arguments
- int based - Positive number to bind mass and inertia of the body to its shape properties, 0 to allow arbitrary values.
int isShapeBased()
Returns a value indicating if mass and inertia of the body are bound to its shape properties or not.Return value
Positive number if mass and inertia are calculated based on shape properties; otherwise, 0.vec3 getVelocity(vec3 radius)
Returns the total linear velocity of the point specified in local coordinates.Arguments
- vec3 radius - Radius vector starting in the body's center of mass.
Return value
Total linear velocity in the given point of the body.Vec3 getWorldCenterOfMass()
Returns world coordinates of the center of mass of the body.Return value
World coordinates of the body's center of mass.vec3 getWorldVelocity(Vec3 point)
Returns the total linear velocity of the point specified in world coordinates.Arguments
- Vec3 point - Point of the body in world coordinates.
Return value
Total linear velocity in the given point.void addForce(vec3 force)
Applies a force to the radius vector of the body, specified in the local coordinates. This function calculates the cross product of the radius vector and the force vector. It acts like a lever arm that changes both linear and angular velocities of the body.
Unlike impulses, all forces are accumulated first, then the resulting force is calculated and applied to the body (during the physics simulation stage, when the body update() function is called).
Arguments
- vec3 force - Radius vector, traced from the center of mass of the body to the point where the force is applied, in local coordinates.
void addForce(vec3 radius, vec3 force)
Applies a force to the radius vector of the body, specified in the local coordinates. This function calculates the cross product of the radius vector and the force vector. It acts like a lever arm that changes both linear and angular velocities of the body.
Unlike impulses, all forces are accumulated first, then the resulting force is calculated and applied to the body (during the physics simulation stage, when the body update() function is called).
Arguments
- vec3 radius - Radius vector, traced from the center of mass of the body to the point where the force is applied, in local coordinates.
- vec3 force - The value of the applied force, in local coordinates.
void addImpulse(vec3 radius, vec3 impulse)
Applies an impulse to the radius vector of the body, specified in the local coordinates.
Unlike forces, impulses immediately affect both linear and angular velocities of the body.
Arguments
- vec3 radius - Radius vector, traced from the center of mass to the point where the impulse is applied, in local coordinates.
- vec3 impulse - Impulse to apply, in local coordinates.
void addTorque(vec3 torque)
Applies a torque to the radius vector of the body, specified in the local coordinates.
This function calculates the cross product of the radius vector and the force vector.
It acts like a lever arm that changes both angular and linear velocities of the body.
All torque values are accumulated first, then the resulting torque is calculated and applied to the body (during the physics simulation stage, when the body update is called).
Arguments
- vec3 torque - Radius vector starting in the body's center of mass, in local coordinates. Its end is the point of torque application.
void addTorque(vec3 radius, vec3 torque)
Applies a torque to the radius vector of the body, specified in the local coordinates.
This function calculates the cross product of the radius vector and the force vector.
It acts like a lever arm that changes both angular and linear velocities of the body.
All torque values are accumulated first, then the resulting torque is calculated and applied to the body (during the physics simulation stage, when the body update is called).
Arguments
- vec3 radius - Radius vector starting in the body's center of mass, in local coordinates. Its end is the point of torque application.
- vec3 torque - Torque to apply.
void addWorldForce(Vec3 point, vec3 force)
Applies a force to the given point of the body that is specified in world coordinates. This function calculates the cross product of the radius vector (a vector from the center of mass to the point where force is applied) and the force vector (the magnitude of the force). It acts like a lever arm that changes both linear and angular velocities of the body.
Unlike impulses, all forces are accumulated first, then the resulting force is calculated and applied to the body (during the physics simulation stage, when the body update is called).
Arguments
- Vec3 point - Point of the body, in world coordinates.
- vec3 force - Force to apply.
void addWorldImpulse(Vec3 point, vec3 impulse)
Applies an impulse to the given point of the body, that is specified in world coordinates. Unlike forces, impulses immediately affect both linear and angular velocities of the body.Arguments
- Vec3 point - Point of the body, in world coordinates.
- vec3 impulse - Impulse to apply.
void addWorldTorque(Vec3 point, vec3 torque)
Applies a torque to the given point of the body, that is specified in world coordinates. This function calculates the cross product of the radius vector (a vector from the center of mass to the point where torque is applied) and the force vector (the magnitude of the torque). It acts like a lever arm that changes both angular and linear velocities of the body.
All torque values are accumulated first, then the resulting torque is calculated and applied to the body (during the physics simulation stage, when the body update is called).
Arguments
- Vec3 point - Point of the body, in world coordinates.
- vec3 torque - Torque to apply.
int createShapes(int depth = 4, float error = 0.01, float threshold = 0.01)
Removes all previously created shapes and creates one or more convex shapes approximating the mesh.Arguments
- int depth - Degree of decomposition of the mesh. If 0 or a negative value is provided, only one shape will be created. If a positive n is provided, the mesh will be decomposed n times. This is an optional parameter.
- float error - Approximation error, which is used to create convex hulls. This is an optional parameter.
- float threshold - Threshold, which is used to decide, whether two adjoining convex shapes can be replaced with one larger shape. A pair of shapes is replaced with a larger shape, if their volumes are roughly the same. This value is clamped in the range [1 E-6; 1]. This is an optional parameter.
Return value
1 if the convex shapes are created successfully; otherwise 0.BodyRigid cast(Body body)
Arguments
- Body body