This page has been translated automatically.
UnigineEditor
Interface Overview
Assets Workflow
Settings and Preferences
Adjusting Node Parameters
Setting Up Materials
Setting Up Properties
Landscape Tool
Using Editor Tools for Specific Tasks
FAQ
Programming
Fundamentals
Setting Up Development Environment
Usage Examples
UnigineScript
C++
C#
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine and Tools
GUI
Double Precision Coordinates
API
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Plugins-Related Classes
CIGI Client Plugin
Rendering-Related Classes
Warning! This version of documentation is OUTDATED, as it describes an older SDK version! Please switch to the documentation for the latest SDK version.
Warning! This version of documentation describes an old SDK version which is no longer supported! Please upgrade to the latest SDK version.

Unigine.BodyRigid Class

Inherits: Body

This class is used to simulate rigid bodies that move according to the rigid bodies dynamics.

BodyRigid Class

Properties

vec3 AngularVelocity#

The current angular velocity of the body.
set
Sets an angular velocity of the body.
set value - Angular velocity in radians per second, in world coordinates.

vec3 LinearVelocity#

The current linear velocity of the body.
set
Sets a linear velocity of the body.
set value - Linear velocity in units per second, in world coordinates.

float FrozenAngularVelocity#

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.
set
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.
set value - "Freeze" angular velocity. If the value is lower than the engine.physics.setFrozenAngularVelocity one, it is overridden.

float FrozenLinearVelocity#

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.
set
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.
set value - "Freeze" linear velocity. If the value is lower than the engine.physics.setFrozenLinearVelocity one, it is overridden.

float MaxAngularVelocity#

The maximum angular velocity of the body.
set
Sets a maximum angular velocity of the body.
set value - Maximum angular velocity in radians per second. If a negative value is provided, 0 will be used instead.

float MaxLinearVelocity#

The maximum linear velocity of the body.
set
Sets a maximum linear velocity of the body.
set value - Maximum linear velocity in units per second. If a negative value is provided, 0 will be used instead.

float AngularDamping#

The angular damping of the body.
set
Sets an angular damping of the body.
set value - Angular damping. If a negative value is provided, 0 will be used instead.

float LinearDamping#

The linear damping of the body.
set
Sets a linear damping of the body.
set value - Linear damping. If a negative value is provided, 0 will be used instead.

vec3 AngularScale#

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).
set
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).
set value - Angular scale per axis, in world coordinates.

vec3 LinearScale#

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).
set
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).
set value - Linear scale per axis.

Vec3 WorldCenterOfMass#

World coordinates of the center of mass of the body.

vec3 CenterOfMass#

Coordinates of the center of mass of the body.
set
Sets coordinates of the center of mass of the body.
set value - Coordinates of the center of mass, in world coordinates.

mat3 IWorldInertia#

The inverse inertia tensor of the body, in the world coordinates.

mat3 Inertia#

The inertia tensor of the body.
set
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.
set value - Inertia tensor.

float IMass#

The inverse mass of the body.

float Mass#

The body mass.
Notice
If g (Earth's gravity) equals to 9.8 m/s 2, and 1 unit equals to 1 m, the mass is measured in kilograms.
set
Sets a mass of the body.
Notice
If g (Earth's gravity) equals to 9.8 m/s 2, and 1 unit equals to 1 m, the mass is measured in kilograms.
set value - Mass of the body.

bool IsFreezable#

A value indicating if the object is not simulated if both its linear and angular velocities are below "freeze" ones (see setFrozenLinearVelocity and setFrozenAngularVelocity functions).
set
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).
set value - Positive number to "freeze" the body when necessary; 0 for its physical state to be always updated.

bool IsShapeBased#

A value indicating if mass and inertia of the body are bound to its shape properties or not.
set
Sets a value indicating if mass and inertia of the body are bound to its shape properties or not.
set value - Positive number to bind mass and inertia of the body to its shape properties, 0 to allow arbitrary values.

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.

BodyRigid Cast ( Body body ) #

Arguments

  • Body body

vec3 GetVelocity ( vec3 radius ) #

Returns the total linear velocity of the point determined by a given radius vector, specified in the 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 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 center of mass 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).

Notice
You can call this function only from flush() function in the world script. Do not apply forces in the update() function, because you will get unstable result that varies each rendering frame.

Arguments

  • vec3 force - Force to be applied, in world coordinates.

void AddForce ( vec3 radius, vec3 force ) #

Applies a force to a point determined by a given radius vector, 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).

Notice
You can call this function only from flush() function in the world script. Do not apply forces in the update() function, because you will get unstable result that varies each rendering frame.

Arguments

  • vec3 radius - Radius vector, traced from the center of mass of the body to the point where the force is applied.
  • vec3 force - Force to be applied, in world coordinates.

void AddImpulse ( vec3 radius, vec3 impulse ) #

Applies an impulse to a point determined by a given radius vector, specified in the local coordinates.

Unlike forces, impulses immediately affect both linear and angular velocities of the body.

Notice
If a body is frozen, it can't be immediately unfrozen. If the object's velocities are above minimum, it needs the engine.physics.getNumFrozenFrames() flush frames to be specified to unfreeze. To make sure that impulse will be applied, check if a body is not frozen by isFrozen() and unfreeze it by setFrosen(0) if needed.

Arguments

  • vec3 radius - Radius vector, traced from the center of mass to the point where the impulse is applied.
  • vec3 impulse - Impulse to be applied, in world coordinates.

void AddLinearImpulse ( vec3 impulse ) #

Applies an impulse similar to the addImpulse() method, but affects only the linear velocity.

Notice
If a body is frozen, it can't be immediately unfrozen. If the object's velocities are above minimum, it needs the engine.physics.getNumFrozenFrames() flush frames to be specified to unfreeze. To make sure that impulse will be applied, check if a body is not frozen by isFrozen() and unfreeze it by setFrosen(0) if needed.

Arguments

  • vec3 impulse - Impulse to be applied, in world coordinates.

void AddAngularImpulse ( vec3 impulse ) #

Applies an impulse similar to the addImpulse() method, but affects only the angular velocity.

Notice
If a body is frozen, it can't be immediately unfrozen. If the object's velocities are above minimum, it needs the engine.physics.getNumFrozenFrames() flush frames to be specified to unfreeze. To make sure that impulse will be applied, check if a body is not frozen by isFrozen() and unfreeze it by setFrosen(0) if needed.

Arguments

  • vec3 impulse - Impulse to be applied, in world coordinates.

void AddTorque ( vec3 torque ) #

Applies a torque with a pivot point at the center of mass of the body, specified in the local coordinates.

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).

Notice
You can call this function only from flush() function in the world script. Do not apply forces in the update() function, because you will get unstable result that varies each rendering frame.

Arguments

  • vec3 torque - Torque to be applied, in world coordinates.

void AddTorque ( vec3 radius, vec3 torque ) #

Applies a torque with a pivot point, determined by a given radius vector, 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).

Notice
You can call this function only from flush() function in the world script. Do not apply forces in the update() function, because you will get unstable result that varies each rendering frame.

Arguments

  • vec3 radius - Radius vector starting at the body's center of mass. Its end is the pivot point for the torque to be applied.
  • vec3 torque - Torque to be applied, in world coordinates.

void AddWorldForce ( Vec3 point, vec3 force ) #

Applies a force to a 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. 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).

Notice
You can call this function only from within flush() in the world script. Do not apply forces in the update(); otherwise, you will get unstable result that varies each rendering frame.

Arguments

  • Vec3 point - Point of the body, in world coordinates.
  • vec3 force - Force to be applied, in world coordinates.

void AddWorldImpulse ( Vec3 point, vec3 impulse ) #

Applies an impulse to a given point of the body, that is specified in world coordinates. Unlike forces, impulses immediately affect both linear and angular velocities of the body.
Notice
If a body is frozen, it can't be immediately unfrozen. If the object's velocities are above minimum, it needs the engine.physics.getNumFrozenFrames() flush frames to be specified to unfreeze. To make sure that impulse will be applied, check if a body is not frozen by isFrozen() and unfreeze it by setFrosen(0) if needed.

Arguments

  • Vec3 point - Point of the body, in world coordinates.
  • vec3 impulse - Impulse to be applied, in world coordinates.

void AddWorldTorque ( Vec3 point, vec3 torque ) #

Applies a torque with a pivot point at a 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 pivot point) and the torque 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).

Notice
You can call this function only from within flush() in the world script. Do not apply torques in the update(); otherwise, you will get unstable result that varies each rendering frame.

Arguments

  • Vec3 point - Point of the body, in world coordinates.
  • vec3 torque - Torque to be applied, in world coordinates.

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.
Last update: 2019-08-16
Build: ()