Ejemplo n.º 1
0
        /// <summary>
        /// Creates a new PhysX.RigidStatic using our defaults
        /// </summary>
        /// <param name="shape"></param>
        /// <param name="position"></param>
        /// <param name="rotation"></param>
        /// <returns></returns>
        public static PhysX.RigidStatic CreateRigidStatic(PhysxScene scene, PhysicsShape shape, OpenMetaverse.Vector3 position, OpenMetaverse.Quaternion rotation,
                                                          Material material)
        {
            PhysX.RigidStatic physActor = scene.SceneImpl.Physics.CreateRigidStatic();
            SetCommonProperties(scene, shape, position, rotation, physActor, false, material);

            return(physActor);
        }
Ejemplo n.º 2
0
        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();
            }
        }