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 button1_Click(object sender, EventArgs e) { PhysX.Physics phys = new PhysX.Physics(); PhysX.SceneDesc desc = new PhysX.SceneDesc(); desc.Gravity = new PhysX.Math.Vector3(0f, 0f, -9.8f); PhysX.Scene scene = phys.CreateScene(desc); material = scene.Physics.CreateMaterial(0.5f, 0.5f, 0.1f); var conn = phys.ConnectToRemoteDebugger("localhost", null, null, null, PhysX.RemoteDebuggerConnectionFlags.Debug); /*scene.SetVisualizationParameter(PhysX.VisualizationParameter.Scale, 1.0f); * scene.SetVisualizationParameter(PhysX.VisualizationParameter.CollisionShapes, true); * scene.SetVisualizationParameter(PhysX.VisualizationParameter.JointLocalFrames, true); * scene.SetVisualizationParameter(PhysX.VisualizationParameter.JointLimits, true); * scene.SetVisualizationParameter(PhysX.VisualizationParameter.ParticleSystemPosition, true); * scene.SetVisualizationParameter(PhysX.VisualizationParameter.ActorAxes, true);*/ var hfGeom = this.CreateHfGeom(scene); while (true) { PhysX.RigidDynamic sphere = CreateSphere(scene, 0); sphere.Dispose(); PhysX.RigidStatic ground = CreateGround(scene, hfGeom); ground.Dispose(); GC.Collect(); } scene.AddActor(CreateGround(scene)); /*PhysX.RigidDynamic box1 = null; * for (int i = 0; i < 10; i += 2) * { * PhysX.RigidDynamic mahBox = CreateBox(scene, i); * scene.AddActor(mahBox); * * if (i == 0) * { * box1 = mahBox; * ((PhysX.Actor)box1).Flags = PhysX.ActorFlag.DisableGravity; * } * }*/ for (int i = 0; i < 10; i += 2) { PhysX.RigidDynamic mahBox = CreateSphere(scene, i); scene.AddActor(mahBox); } Stopwatch sw = new Stopwatch(); while (true) { sw.Start(); scene.Simulate(0.025f); scene.FetchResults(true); sw.Stop(); int sleep = 25 - (int)sw.ElapsedMilliseconds; if (sleep < 0) { sleep = 0; } System.Threading.Thread.Sleep(sleep); sw.Reset(); //label1.Text = DecomposeToPosition(mahBox.GlobalPose).ToString(); this.Update(); } }