private PhysX.Shape CreateTrimeshShape(PhysX.RigidActor actor, PhysX.Material material, ref PhysX.Math.Matrix localPose) { PhysX.Shape shape = actor.CreateShape(_triMesh, material, localPose); shape.RestOffset = REST_OFFSET; return(shape); }
private void SwapGroundActor(Tuple <PhysX.RigidActor, PhysX.Shape, PhysX.TriangleMesh> groundActor) { if (_groundActor != null) { _scene.RemoveActor(_groundActor); _groundActor.Dispose(); if (!_groundShape.Disposed) { _groundShape.Dispose(); } _mesh.Dispose(); } _groundActor = groundActor.Item1; _groundShape = groundActor.Item2; _mesh = groundActor.Item3; _groundActor.UserData = this; CollisionGroup.SetCollisionGroup(CollisionGroupFlag.Ground, _groundShape); _scene.AddActor(_groundActor); }
public static void SetCollisionGroup(CollisionGroupFlag group, PhysX.Shape shape) { PhysX.FilterData newFilterData = CollisionGroup.GetFilterData(shape.SimulationFilterData.Word0, shape.SimulationFilterData.Word1, group); shape.SimulationFilterData = newFilterData; shape.QueryFilterData = newFilterData; }
private bool IsRideOnPrim(PhysX.Shape shape) { if (_standingOnPrim == null) { return(false); } PhysxPrim shapePrim = shape.Actor.UserData as PhysxPrim; return(IsRideOnPrim(shapePrim)); }
public override PhysX.ControllerBehaviorFlag GetBehaviorFlags(PhysX.Shape shape) { if (IsRideOnPrim(shape)) { return(PhysX.ControllerBehaviorFlag.CctCanRideOnObject); } else { return(0); } }
private PhysX.Shape CreatePrimitiveShape(PhysX.RigidActor actor, PhysX.Material material, ref PhysX.Math.Matrix localPose, bool physical) { PhysX.Shape shape = actor.CreateShape(_primitiveGeom, material, localPose); shape.RestOffset = REST_OFFSET; if (physical && Settings.Instance.UseCCD) { //enable CCD shape.Flags |= PhysX.ShapeFlag.UseSweptBounds; } return(shape); }
private List <PhysX.Shape> AssignHullsToActor(PhysX.RigidActor actor, PhysX.Material material, PhysX.Math.Matrix localPose, bool physical) { List <PhysX.Shape> hulls = new List <PhysX.Shape>(); foreach (PhysX.ConvexMeshGeometry geom in _convexHulls) { PhysX.Shape shape = actor.CreateShape(geom, material, localPose); shape.RestOffset = REST_OFFSET; if (physical && Settings.Instance.UseCCD) { //enable CCD shape.Flags |= PhysX.ShapeFlag.UseSweptBounds; } hulls.Add(shape); } return(hulls); }
private void SwapGroundActor(Tuple<PhysX.RigidActor, PhysX.Shape, PhysX.TriangleMesh> groundActor) { if (_groundActor != null) { _scene.RemoveActor(_groundActor); _groundActor.Dispose(); if (!_groundShape.Disposed) { _groundShape.Dispose(); } _mesh.Dispose(); } _groundActor = groundActor.Item1; _groundShape = groundActor.Item2; _mesh = groundActor.Item3; _groundActor.UserData = this; CollisionGroup.SetCollisionGroup(CollisionGroupFlag.Ground, _groundShape); _scene.AddActor(_groundActor); }
private void GenerateActorsFromTrimesh(PhysX.TriangleMeshGeometry triangleMeshShapeDesc, out PhysX.RigidActor hfActor, out PhysX.Shape shape) { //PhysX.Math.Matrix.RotationYawPitchRoll(0f, (float)Math.PI / 2, 0f) * PhysX.Math.Matrix.Translation(0f, 0f, 0f) //PhysX.RigidDynamic dynActor = _scene.Physics.CreateRigidDynamic(); //dynActor.Flags |= PhysX.RigidDynamicFlags.Kinematic; //hfActor = dynActor; hfActor = _scene.Physics.CreateRigidStatic(); shape = hfActor.CreateShape(triangleMeshShapeDesc, Material.GROUND.PhyMaterial); }
private void GenerateActorsFromMeshStream(Stream ms, out PhysX.TriangleMesh triangleMesh, out PhysX.RigidActor hfActor, out PhysX.Shape shape) { triangleMesh = _scene.Physics.CreateTriangleMesh(ms); PhysX.TriangleMeshGeometry triangleMeshShapeDesc = new PhysX.TriangleMeshGeometry(triangleMesh); GenerateActorsFromTrimesh(triangleMeshShapeDesc, out hfActor, out shape); }