Skip to content

Documentation / scene / FloatingBody

Class: FloatingBody

Defined in: libs/scene/src/utility/buoyancy.ts:235

A rigid body that floats on a water surface, with its own integrator.

For applications without a physics library. The motion is force driven: the body owns a position, an orientation and their velocities, and the water only ever applies the force and torque a BuoyancyVolume computes. That is what makes a hull behave like a hull - it has mass, so it lags the surface, overshoots into it and rolls back, instead of sliding along a height field.

Semi-implicit Euler at a fixed step, box inertia kept as a diagonal in body axes, quaternion orientation renormalised every step. Water resistance is a per-second fraction of velocity, blended between the air and water values by how much of the body is under, so a body launched clear of the water keeps its speed until it lands. No collision.

Constructors

Constructor

new FloatingBody(options): FloatingBody

Defined in: libs/scene/src/utility/buoyancy.ts:271

Creates a floating body.

Parameters

options

FloatingBodyOptions

Returns

FloatingBody

Properties

volume

readonly volume: BuoyancyVolume

Defined in: libs/scene/src/utility/buoyancy.ts:237

The hull's buoyancy.


node

node: SceneNode

Defined in: libs/scene/src/utility/buoyancy.ts:239

Node driven by the body, if any.


linearDamping

linearDamping: number

Defined in: libs/scene/src/utility/buoyancy.ts:241

Fraction of linear velocity shed per second in water.


angularDamping

angularDamping: number

Defined in: libs/scene/src/utility/buoyancy.ts:243

Fraction of angular velocity shed per second in water.


airLinearDamping

airLinearDamping: number

Defined in: libs/scene/src/utility/buoyancy.ts:245

Fraction of linear velocity shed per second in air.


airAngularDamping

airAngularDamping: number

Defined in: libs/scene/src/utility/buoyancy.ts:247

Fraction of angular velocity shed per second in air.


position

readonly position: Vector3

Defined in: libs/scene/src/utility/buoyancy.ts:249

World position of the hull's centre.


rotation

readonly rotation: Quaternion

Defined in: libs/scene/src/utility/buoyancy.ts:251

World orientation.


velocity

readonly velocity: Vector3

Defined in: libs/scene/src/utility/buoyancy.ts:253

Linear velocity in metres per second.


angularVelocity

readonly angularVelocity: Vector3

Defined in: libs/scene/src/utility/buoyancy.ts:255

Angular velocity in radians per second, world axes.


externalForce

readonly externalForce: Vector3

Defined in: libs/scene/src/utility/buoyancy.ts:257

Extra force applied at the centre of mass on the next step, in newtons. Cleared after each frame.


externalTorque

readonly externalTorque: Vector3

Defined in: libs/scene/src/utility/buoyancy.ts:259

Extra torque applied on the next step, in newton-metres. Cleared after each frame.

Accessors

mass

Get Signature

get mass(): number

Defined in: libs/scene/src/utility/buoyancy.ts:308

Mass in kilograms.

Returns

number

Methods

reset()

reset(x, z, waterLevel?, yaw?): void

Defined in: libs/scene/src/utility/buoyancy.ts:318

Place the body at rest on a still surface and clear its velocities.

Parameters

x

number

World X.

z

number

World Z.

waterLevel?

number = 0

Still-water level the body should float on.

yaw?

number = 0

Heading in radians about world Y.

Returns

void


update()

update(deltaSeconds, waveHeight, waterLevel): void

Defined in: libs/scene/src/utility/buoyancy.ts:332

Integrate one frame.

Parameters

deltaSeconds

number

Frame delta in seconds.

waveHeight

WaveHeightFn

Surface height above the still-water level at a world XZ.

waterLevel

number

World Y of the still-water level.

Returns

void


step()

step(dt, waveHeight, waterLevel): void

Defined in: libs/scene/src/utility/buoyancy.ts:355

Advance the body by one fixed step.

Parameters

dt

number

Step in seconds.

waveHeight

WaveHeightFn

Surface height above the still-water level at a world XZ.

waterLevel

number

World Y of the still-water level.

Returns

void


applyToNode()

applyToNode(): void

Defined in: libs/scene/src/utility/buoyancy.ts:405

Write the pose to the node, if there is one.

Returns

void

Released under the MIT License.