Nebula
Loading...
Searching...
No Matches
Physics Namespace Reference

Detailed Description

Diverse functions for manipulating physics actors.

Implements a resource loader for physics actors.

Physics::DebugUI.

callback interfaces for PhysX

Classes

struct  ShapeHandle
class  ActorContext
class  AggregateContext
class  Allocator
class  ErrorCallback
class  CharacterContext
struct  DebugState
struct  DebugDrawInterface
class  PhysxState
struct  BodyInfo
struct  ActorInfo
struct  ConstraintInfo
struct  AggregateInfo
class  StreamActorPool
class  VisualDebugger
 Class that communicates with the physics visual debugger program. More...
struct  ActorResourceId
struct  AggregateResourceId
struct  PhysicsResourceId
struct  ConstraintResourceId
struct  Material
struct  ActorId
struct  CharacterId
struct  ConstraintId
struct  AggregateId
struct  Actor
struct  Character
struct  Constraint
struct  Aggregate
struct  ContactEvent
struct  CharacterCreateInfo
struct  Scene
 physx scene classes, foundation and physics are duplicated here for convenience instead of static getters, might be removed later on More...

Typedefs

using CharacterCollision = Util::BitField<CharacterCollisionBitsMax>
using UpdateFunctionType = void (*) (const Actor&)
using EventCallbackType = void (*) (const Util::Array<ContactEvent>&)

Enumerations

enum  PhysicsIdType { ActorIdType , MeshIdType }
enum  ActorType { Static , Kinematic , Dynamic }
enum  CharacterCollisionBits { Sides = 0 , Up = 1 , Down = 2 , CharacterCollisionBitsMax }

Functions

void SetDebugDrawInterface (DebugDrawInterface const &drawInterface)
void UpdateDebugDrawingParameters ()
void EnableDebugDrawing (bool enabled)
void ApplyBounds (PxBounds3 const &box)
void DebugVisualizeScene (PxScene *scene)
bool CheckAndResetModified (Core::CVar *cvar)
void DrawPhysicsDebug ()
void RenderUI (Math::mat4 const &cameraViewTransform)
void RenderMaterialsUI ()
static void CollectModified (Physics::Scene &scene)
static void PreSceneUpdates (Physics::Scene &scene)
static void PostSceneUpdates (Physics::Scene &scene)
static PxShape * GetShapeCopy (PxShape *shape, Math::vec3 const &scale)
static physx::PxGeometryHolder CreateMeshFromResource (MeshTopology type, Util::StringAtom resource, int primGroup)
static PxShape * CreateColliderShape (physx::PxGeometryHolder geometry, physx::PxMaterial *material, physx::PxTransform const &trans, const Util::String &colliderName, bool exclusive)
static void AddCollider (physx::PxGeometryHolder geometry, IndexT material, const Math::transform &trans, const char *name, const Util::String &colliderName, BodyInfo &bodyInfo, const Util::StringAtom &tag, Ids::Id32 entry)
static void AddMeshColliders (PhysicsResource::MeshColliderT *colliderNode, Math::transform const &nodeTransform, Util::String nodeName, IndexT materialIdx, const Util::StringAtom &tag, Ids::Id32 entry, BodyInfo &targetBody)
static void AddHeightField (PhysicsResource::HeightFieldColliderT *colliderNode, Math::transform const &nodeTransform, Util::String nodeName, IndexT materialIdx, const Util::StringAtom &tag, Ids::Id32 entry, BodyInfo &targetBody)
 __ImplementInterfaceSingleton (Physics::VisualDebugger)
void LoadMaterialTable (const IO::URI &materialTable)
void Setup ()
 initialize the physics subsystem and create a default scene
void ShutDown ()
 close the physics subsystem
IndexT CreateScene ()
void DestroyScene (IndexT sceneId)
Physics::SceneGetScene (IndexT idx)
void SetEventCallback (EventCallbackType callback, IndexT sceneId)
void SetActiveActorCallback (UpdateFunctionType callback, IndexT sceneId)
void RenderDebug ()
 render a debug visualization of the level
void LoadCollisionFilters ()
Physics::MaterialGetMaterial (IndexT idx)
void SetOnSleepCallback (Util::Delegate< void(ActorId *id, SizeT num)> const &callback)
void SetOnWakeCallback (Util::Delegate< void(ActorId *id, SizeT num)> const &callback)
IndexT SetPhysicsMaterial (Util::StringAtom name, float staticFriction, float dynamicFriction, float restitution, float density)
IndexT LookupMaterial (Util::StringAtom name)
SizeT GetNrMaterials ()
void Update (Timing::Time delta)
 perform sync simulation step(s)
void BeginSimulating (Timing::Time delta, IndexT scene)
 explicit calls to simulate and fetch results. Do not mix with Update!
void EndSimulating (IndexT scene)
void FlushSimulation (IndexT scene)
 this will block until simulation has ended for cleanups e.g.
ActorId CreateActorInstance (Physics::ActorResourceId id, Math::transform const &trans, Physics::ActorType type, uint64_t userData, IndexT scene)
void DestroyActorInstance (Physics::ActorId id)

Variables

Util::Array< Charactercontrollers
Ids::IdGenerationPool controllerIdPool
Core::CVarcl_debug_draw_physics = Core::CVarCreate(Core::CVarType::CVar_Int, "cl_debug_draw_physics", "0", "Set to 1 will enable physics debug drawing")
Core::CVarcl_physics_draw_scale = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale", "1.0", "Visualization drawing scale.")
Core::CVarcl_physics_draw_scale_points = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale_points", "1.0", "Point visualization drawing scale.")
Core::CVarcl_physics_draw_scale_lines = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale_lines", "1.0", "Line visualization drawing scale.")
Core::CVarcl_physics_draw_scale_triangles = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale_triangles", "1.0", "Triangle visualization drawing scale.")
Core::CVarcl_physics_draw_world_axes = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_world_axes", "0", "Visualize the world axes. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_body_axes = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_body_axes", "0", "Visualize a bodies axes. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_body_mass_axes = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_body_mass_axes", "0", "Visualize a body's mass axes. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_body_lin_velocity = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_body_lin_velocity", "0", "Visualize the bodies linear velocity. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_body_ang_velocity = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_body_ang_velocity", "0", "Visualize the bodies angular velocity. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_contact_point = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_contact_point", "0", " Visualize contact points. Will enable contact information. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_contact_normal = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_contact_normal", "0", "Visualize contact normals. Will enable contact information. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_contact_error = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_contact_error", "0", " Visualize contact errors. Will enable contact information. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_contact_force = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_contact_force", "0", "Visualize Contact forces. Will enable contact information. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_actor_axes = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_actor_axes", "0", "Visualize actor axes. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_collision_aabbs = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_aabbs", "0", "Visualize bounds (AABBs in world space). Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_collision_shapes = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_shapes", "1", "Shape visualization. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_collision_axes = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_axes", "0", "Shape axis visualization. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_collision_compounds = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_compounds", "0", "Compound visualization (compound AABBs in world space). Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_collision_fnormals = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_fnormals", "0", "Mesh & convex face normals. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_collision_edges = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_edges", "0", "Active edges for meshes. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_collision_static = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_static", "0", "Static pruning structures. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_collision_dynamic = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_dynamic", "0", "Dynamic pruning structures. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_joint_local_frames = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_joint_local_frames", "0", "Visualize joint local axes. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_joint_limits = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_joint_limits", "0", "Visualize joint limits. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_cull_box = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_cull_box", "0", "Visualize culling box. Needs cl_debug_draw_physics set to 1.")
Core::CVarcl_physics_draw_mbp_regions = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_mbp_regions", "0", "MBP regions. Needs cl_debug_draw_physics set to 1.")
DebugState dstate
PhysxState state
StreamActorPoolactorPool = nullptr

Typedef Documentation

◆ CharacterCollision

◆ EventCallbackType

◆ UpdateFunctionType

using Physics::UpdateFunctionType = void (*) (const Actor&)

Enumeration Type Documentation

◆ ActorType

Enumerator
Static 
Kinematic 
Dynamic 

◆ CharacterCollisionBits

Enumerator
Sides 
Up 
Down 
CharacterCollisionBitsMax 

◆ PhysicsIdType

Enumerator
ActorIdType 
MeshIdType 

Function Documentation

◆ __ImplementInterfaceSingleton()

Physics::__ImplementInterfaceSingleton ( Physics::VisualDebugger )

◆ AddCollider()

void Physics::AddCollider ( physx::PxGeometryHolder geometry,
IndexT material,
const Math::transform & trans,
const char * name,
const Util::String & colliderName,
BodyInfo & bodyInfo,
const Util::StringAtom & tag,
Ids::Id32 entry )
static

◆ AddHeightField()

void Physics::AddHeightField ( PhysicsResource::HeightFieldColliderT * colliderNode,
Math::transform const & nodeTransform,
Util::String nodeName,
IndexT materialIdx,
const Util::StringAtom & tag,
Ids::Id32 entry,
BodyInfo & targetBody )
static

◆ AddMeshColliders()

void Physics::AddMeshColliders ( PhysicsResource::MeshColliderT * colliderNode,
Math::transform const & nodeTransform,
Util::String nodeName,
IndexT materialIdx,
const Util::StringAtom & tag,
Ids::Id32 entry,
BodyInfo & targetBody )
static

◆ ApplyBounds()

void Physics::ApplyBounds ( PxBounds3 const & box)

◆ BeginSimulating()

void Physics::BeginSimulating ( Timing::Time delta,
IndexT scene )

explicit calls to simulate and fetch results. Do not mix with Update!

◆ CheckAndResetModified()

bool Physics::CheckAndResetModified ( Core::CVar * cvar)

◆ CollectModified()

void Physics::CollectModified ( Physics::Scene & scene)
static

◆ CreateActorInstance()

ActorId Physics::CreateActorInstance ( Physics::ActorResourceId id,
Math::transform const & trans,
Physics::ActorType type,
uint64_t userData,
IndexT scene )

◆ CreateColliderShape()

PxShape * Physics::CreateColliderShape ( physx::PxGeometryHolder geometry,
physx::PxMaterial * material,
physx::PxTransform const & trans,
const Util::String & colliderName,
bool exclusive )
static

◆ CreateMeshFromResource()

physx::PxGeometryHolder Physics::CreateMeshFromResource ( MeshTopology type,
Util::StringAtom resource,
int primGroup )
static

◆ CreateScene()

IndexT Physics::CreateScene ( )

◆ DebugVisualizeScene()

void Physics::DebugVisualizeScene ( PxScene * scene)

◆ DestroyActorInstance()

void Physics::DestroyActorInstance ( Physics::ActorId id)

◆ DestroyScene()

void Physics::DestroyScene ( IndexT sceneId)

◆ DrawPhysicsDebug()

void Physics::DrawPhysicsDebug ( )

◆ EnableDebugDrawing()

void Physics::EnableDebugDrawing ( bool enabled)

◆ EndSimulating()

void Physics::EndSimulating ( IndexT scene)

◆ FlushSimulation()

void Physics::FlushSimulation ( IndexT scene)

this will block until simulation has ended for cleanups e.g.

◆ GetMaterial()

Material & Physics::GetMaterial ( IndexT idx)

◆ GetNrMaterials()

SizeT Physics::GetNrMaterials ( )

◆ GetScene()

Physics::Scene & Physics::GetScene ( IndexT idx)

◆ GetShapeCopy()

PxShape * Physics::GetShapeCopy ( PxShape * shape,
Math::vec3 const & scale )
static

◆ LoadCollisionFilters()

void Physics::LoadCollisionFilters ( )

◆ LoadMaterialTable()

void Physics::LoadMaterialTable ( const IO::URI & materialTable)

◆ LookupMaterial()

IndexT Physics::LookupMaterial ( Util::StringAtom name)

◆ PostSceneUpdates()

void Physics::PostSceneUpdates ( Physics::Scene & scene)
static

◆ PreSceneUpdates()

void Physics::PreSceneUpdates ( Physics::Scene & scene)
static

◆ RenderDebug()

void Physics::RenderDebug ( )

render a debug visualization of the level

◆ RenderMaterialsUI()

void Physics::RenderMaterialsUI ( )

◆ RenderUI()

void Physics::RenderUI ( Math::mat4 const & cameraViewTransform)

◆ SetActiveActorCallback()

void Physics::SetActiveActorCallback ( UpdateFunctionType callback,
IndexT sceneId )

◆ SetDebugDrawInterface()

void Physics::SetDebugDrawInterface ( DebugDrawInterface const & drawInterface)

◆ SetEventCallback()

void Physics::SetEventCallback ( EventCallbackType callback,
IndexT sceneId )

◆ SetOnSleepCallback()

void Physics::SetOnSleepCallback ( Util::Delegate< void(ActorId *id, SizeT num)> const & callback)

◆ SetOnWakeCallback()

void Physics::SetOnWakeCallback ( Util::Delegate< void(ActorId *id, SizeT num)> const & callback)

◆ SetPhysicsMaterial()

IndexT Physics::SetPhysicsMaterial ( Util::StringAtom name,
float staticFriction,
float dynamicFriction,
float restitution,
float density )

◆ Setup()

void Physics::Setup ( )

initialize the physics subsystem and create a default scene

◆ ShutDown()

void Physics::ShutDown ( )

close the physics subsystem

◆ Update()

void Physics::Update ( Timing::Time delta)

perform sync simulation step(s)

◆ UpdateDebugDrawingParameters()

void Physics::UpdateDebugDrawingParameters ( )

Variable Documentation

◆ actorPool

StreamActorPool * Physics::actorPool = nullptr

◆ cl_debug_draw_physics

Core::CVar* Physics::cl_debug_draw_physics = Core::CVarCreate(Core::CVarType::CVar_Int, "cl_debug_draw_physics", "0", "Set to 1 will enable physics debug drawing")

◆ cl_physics_draw_actor_axes

Core::CVar* Physics::cl_physics_draw_actor_axes = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_actor_axes", "0", "Visualize actor axes. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_body_ang_velocity

Core::CVar* Physics::cl_physics_draw_body_ang_velocity = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_body_ang_velocity", "0", "Visualize the bodies angular velocity. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_body_axes

Core::CVar* Physics::cl_physics_draw_body_axes = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_body_axes", "0", "Visualize a bodies axes. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_body_lin_velocity

Core::CVar* Physics::cl_physics_draw_body_lin_velocity = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_body_lin_velocity", "0", "Visualize the bodies linear velocity. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_body_mass_axes

Core::CVar* Physics::cl_physics_draw_body_mass_axes = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_body_mass_axes", "0", "Visualize a body's mass axes. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_collision_aabbs

Core::CVar* Physics::cl_physics_draw_collision_aabbs = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_aabbs", "0", "Visualize bounds (AABBs in world space). Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_collision_axes

Core::CVar* Physics::cl_physics_draw_collision_axes = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_axes", "0", "Shape axis visualization. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_collision_compounds

Core::CVar* Physics::cl_physics_draw_collision_compounds = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_compounds", "0", "Compound visualization (compound AABBs in world space). Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_collision_dynamic

Core::CVar* Physics::cl_physics_draw_collision_dynamic = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_dynamic", "0", "Dynamic pruning structures. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_collision_edges

Core::CVar* Physics::cl_physics_draw_collision_edges = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_edges", "0", "Active edges for meshes. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_collision_fnormals

Core::CVar* Physics::cl_physics_draw_collision_fnormals = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_fnormals", "0", "Mesh & convex face normals. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_collision_shapes

Core::CVar* Physics::cl_physics_draw_collision_shapes = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_shapes", "1", "Shape visualization. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_collision_static

Core::CVar* Physics::cl_physics_draw_collision_static = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_collision_static", "0", "Static pruning structures. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_contact_error

Core::CVar* Physics::cl_physics_draw_contact_error = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_contact_error", "0", " Visualize contact errors. Will enable contact information. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_contact_force

Core::CVar* Physics::cl_physics_draw_contact_force = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_contact_force", "0", "Visualize Contact forces. Will enable contact information. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_contact_normal

Core::CVar* Physics::cl_physics_draw_contact_normal = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_contact_normal", "0", "Visualize contact normals. Will enable contact information. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_contact_point

Core::CVar* Physics::cl_physics_draw_contact_point = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_contact_point", "0", " Visualize contact points. Will enable contact information. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_cull_box

Core::CVar* Physics::cl_physics_draw_cull_box = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_cull_box", "0", "Visualize culling box. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_joint_limits

Core::CVar* Physics::cl_physics_draw_joint_limits = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_joint_limits", "0", "Visualize joint limits. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_joint_local_frames

Core::CVar* Physics::cl_physics_draw_joint_local_frames = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_joint_local_frames", "0", "Visualize joint local axes. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_mbp_regions

Core::CVar* Physics::cl_physics_draw_mbp_regions = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_mbp_regions", "0", "MBP regions. Needs cl_debug_draw_physics set to 1.")

◆ cl_physics_draw_scale

Core::CVar* Physics::cl_physics_draw_scale = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale", "1.0", "Visualization drawing scale.")

◆ cl_physics_draw_scale_lines

Core::CVar* Physics::cl_physics_draw_scale_lines = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale_lines", "1.0", "Line visualization drawing scale.")

◆ cl_physics_draw_scale_points

Core::CVar* Physics::cl_physics_draw_scale_points = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale_points", "1.0", "Point visualization drawing scale.")

◆ cl_physics_draw_scale_triangles

Core::CVar* Physics::cl_physics_draw_scale_triangles = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale_triangles", "1.0", "Triangle visualization drawing scale.")

◆ cl_physics_draw_world_axes

Core::CVar* Physics::cl_physics_draw_world_axes = Core::CVarCreate(Core::CVar_Int, "cl_physics_draw_world_axes", "0", "Visualize the world axes. Needs cl_debug_draw_physics set to 1.")

◆ controllerIdPool

Ids::IdGenerationPool Physics::controllerIdPool

◆ controllers

Util::Array<Character> Physics::controllers

◆ dstate

DebugState Physics::dstate

◆ state

PhysxState Physics::state