Nebula
|
Diverse functions for manipulating physics actors.
Implements a resource loader for physics actors.
Physics::DebugUI.
callback interfaces for PhysX
Classes | |
struct | Actor |
class | ActorContext |
struct | ActorId |
struct | ActorInfo |
struct | ActorResourceId |
struct | Aggregate |
class | AggregateContext |
struct | AggregateId |
struct | AggregateInfo |
struct | AggregateResourceId |
class | Allocator |
struct | BodyInfo |
struct | Character |
class | CharacterContext |
struct | CharacterCreateInfo |
struct | CharacterId |
struct | Constraint |
struct | ConstraintId |
struct | ConstraintInfo |
struct | ConstraintResourceId |
struct | ContactEvent |
struct | DebugDrawInterface |
struct | DebugState |
class | ErrorCallback |
struct | Material |
struct | PhysicsResourceId |
class | PhysxState |
struct | Scene |
physx scene classes, foundation and physics are duplicated here for convenience instead of static getters, might be removed later on More... | |
struct | ShapeHandle |
class | StreamActorPool |
class | VisualDebugger |
Class that communicates with the physics visual debugger program. 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 (Graphics::GraphicsEntityId camera) |
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::Scene & | GetScene (IndexT idx) |
void | SetEventCallback (EventCallbackType callback, IndexT sceneId) |
void | SetActiveActorCallback (UpdateFunctionType callback, IndexT sceneId) |
void | RenderDebug () |
render a debug visualization of the level | |
Physics::Material & | GetMaterial (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< Character > | controllers |
Ids::IdGenerationPool | controllerIdPool |
Core::CVar * | cl_debug_draw_physics = Core::CVarCreate(Core::CVarType::CVar_Int, "cl_debug_draw_physics", "0", "Set to 1 will enable physics debug drawing") |
Core::CVar * | cl_physics_draw_scale = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale", "1.0", "Visualization drawing scale.") |
Core::CVar * | cl_physics_draw_scale_points = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale_points", "1.0", "Point visualization drawing scale.") |
Core::CVar * | cl_physics_draw_scale_lines = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale_lines", "1.0", "Line visualization drawing scale.") |
Core::CVar * | cl_physics_draw_scale_triangles = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale_triangles", "1.0", "Triangle visualization drawing scale.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
Core::CVar * | 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.") |
DebugState | dstate |
PhysxState | state |
StreamActorPool * | actorPool = nullptr |
using Physics::EventCallbackType = void (*) (const Util::Array<ContactEvent>&) |
using Physics::UpdateFunctionType = void (*) (const Actor&) |
enum Physics::ActorType |
Physics::__ImplementInterfaceSingleton | ( | Physics::VisualDebugger | ) |
|
static |
|
static |
|
static |
void Physics::ApplyBounds | ( | PxBounds3 const & | box | ) |
void Physics::BeginSimulating | ( | Timing::Time | delta, |
IndexT | scene ) |
explicit calls to simulate and fetch results. Do not mix with Update!
bool Physics::CheckAndResetModified | ( | Core::CVar * | cvar | ) |
|
static |
ActorId Physics::CreateActorInstance | ( | Physics::ActorResourceId | id, |
Math::transform const & | trans, | ||
Physics::ActorType | type, | ||
uint64_t | userData, | ||
IndexT | scene ) |
|
static |
|
static |
IndexT Physics::CreateScene | ( | ) |
void Physics::DebugVisualizeScene | ( | PxScene * | scene | ) |
void Physics::DestroyActorInstance | ( | Physics::ActorId | id | ) |
void Physics::DestroyScene | ( | IndexT | sceneId | ) |
void Physics::DrawPhysicsDebug | ( | ) |
void Physics::EnableDebugDrawing | ( | bool | enabled | ) |
void Physics::EndSimulating | ( | IndexT | scene | ) |
void Physics::FlushSimulation | ( | IndexT | scene | ) |
this will block until simulation has ended for cleanups e.g.
SizeT Physics::GetNrMaterials | ( | ) |
Physics::Scene & Physics::GetScene | ( | IndexT | idx | ) |
|
static |
void Physics::LoadMaterialTable | ( | const IO::URI & | materialTable | ) |
IndexT Physics::LookupMaterial | ( | Util::StringAtom | name | ) |
|
static |
|
static |
void Physics::RenderDebug | ( | ) |
render a debug visualization of the level
void Physics::RenderMaterialsUI | ( | ) |
void Physics::RenderUI | ( | Graphics::GraphicsEntityId | camera | ) |
void Physics::SetActiveActorCallback | ( | UpdateFunctionType | callback, |
IndexT | sceneId ) |
void Physics::SetDebugDrawInterface | ( | DebugDrawInterface const & | drawInterface | ) |
void Physics::SetEventCallback | ( | EventCallbackType | callback, |
IndexT | sceneId ) |
void Physics::SetOnSleepCallback | ( | Util::Delegate< void(ActorId *id, SizeT num)> const & | callback | ) |
void Physics::SetOnWakeCallback | ( | Util::Delegate< void(ActorId *id, SizeT num)> const & | callback | ) |
IndexT Physics::SetPhysicsMaterial | ( | Util::StringAtom | name, |
float | staticFriction, | ||
float | dynamicFriction, | ||
float | restitution, | ||
float | density ) |
void Physics::Setup | ( | ) |
initialize the physics subsystem and create a default scene
void Physics::ShutDown | ( | ) |
close the physics subsystem
void Physics::Update | ( | Timing::Time | delta | ) |
perform sync simulation step(s)
void Physics::UpdateDebugDrawingParameters | ( | ) |
StreamActorPool * Physics::actorPool = nullptr |
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") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
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.") |
Core::CVar* Physics::cl_physics_draw_scale = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale", "1.0", "Visualization drawing scale.") |
Core::CVar* Physics::cl_physics_draw_scale_lines = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale_lines", "1.0", "Line visualization drawing scale.") |
Core::CVar* Physics::cl_physics_draw_scale_points = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale_points", "1.0", "Point visualization drawing scale.") |
Core::CVar* Physics::cl_physics_draw_scale_triangles = Core::CVarCreate(Core::CVar_Float, "cl_physics_draw_scale_triangles", "1.0", "Triangle visualization drawing scale.") |
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.") |
Ids::IdGenerationPool Physics::controllerIdPool |
Util::Array<Character> Physics::controllers |
DebugState Physics::dstate |
PhysxState Physics::state |