Exemple #1
0
        /// <summary>
        ///     Application's entry point.
        /// </summary>
        public static void Main()
        {
            // Create a world
            IntPtr world = Ode.dWorldCreate();

            // Add gravity to the world (pull down on the Y axis 9.81 meters/second
            Ode.dWorldSetGravity(world, 0, -9.81f, 0);

            // Create a rigid body (in the world)
            IntPtr body = Ode.dBodyCreate(world);

            // Create some mass, we're creating a sphere with a radius of 0.05 centimeters
            // and a constant density of 2500 (about that of glass)
            Ode.dMass mass = new Ode.dMass();
            Ode.dMassSetSphere(ref mass, 2500, 0.05f);

            // If you printed the values of mass now, you'd see the mass would be about 1.3 kilograms
            // We'll change that to 1 kilogram here
            mass.mass = 1;
            // If you printed the values of mass now, you'd notice that the inertia tensions values
            // were also updated

            // We'll set the body's mass to the mass we just created
            Ode.dBodySetMass(body, ref mass);

            // Set the body's position (in the world) to 2 meters above the 'ground'
            Ode.dBodySetPosition(body, 0, 2, 0);

            // Apply a force to the body, we're sending it vertical, up the Y axis
            // This force is only applied for the first step, forces will be reset to zero
            // at the end of each step
            Ode.dBodyAddForce(body, 0, 200, 0);

            // The simulation loop's 'time', in seconds
            float time = 0;

            // The 'time' increment, in seconds
            float deltaTime = 0.04f;

            // Run the simulation loop for 2 seconds
            while (time < 2)
            {
                // Get the body's current position
                Ode.dVector3 position = Ode.dBodyGetPosition(body);

                // Get the body's current linear velocity
                Ode.dVector3 velocity = Ode.dBodyGetLinearVel(body);

                // Print out the 'time', the body's position, and its velocity
                Console.WriteLine("{0:0.00} sec: pos=({1:0.00}, {2:0.00}, {3:0.00})  vel={4:0.00}, {5:0.00}, {6:0.00})",
                                  time, position[0], position[1], position[2], velocity[0], velocity[1], velocity[2]);

                // Move the bodies in the world
                Ode.dWorldStep(world, deltaTime);

                // Increment the time
                time += deltaTime;
            }

            Console.WriteLine();
            Console.WriteLine("Press Enter to exit...");
            Console.ReadLine();
        }