Example #1
0
    public void Start()
    {
        // create world
        ode.dInitODE2(0);
        world = ode.dWorldCreate();
        ode.dWorldSetGravity(world, 0, -10, 0);

        space        = ode.dHashSpaceCreate();
        contactgroup = ode.dJointGroupCreate(0);

        ground = ode.dCreatePlane(space, 0, 1, 0, 0);

        ode.dMass m1 = new ode.dMass();
        ball      = new OdeObject();
        ball.body = ode.dBodyCreate(world);            //  Crate a rigid body
        ode.dMassSetZero(ref m1);                      // Initialize mass parameters
        ode.dMassSetSphereTotal(ref m1, mass, radius); // Calculate a mass parameter
        ode.dBodySetMass(ball.body, ref m1);
        ode.dBodySetPosition(ball.body, 0, 2, 0);
        ode.dBodySetQuaternion(ball.body, Quaternion.AngleAxis(45, Vector3.left));
        ode.dBodyGetRotation(ball.body);

        ball.geoms.Add(ode.dCreateSphere(space, radius));
        ball.target = target;
        ode.dGeomSetBody(ball.geoms[0], ball.body);
        ode.dBodyAddTorque(ball.body, 5, 0, 0);

        int a = 0;
    }
Example #2
0
		public void Create()
		{
			MaxIterationCount = ODEPhysicsWorld.Instance.defaultMaxIterationCount;

			worldID = Ode.dWorldCreate();

			//Ode.dVector3 center = new Ode.dVector3( 0, 0, 0 );
			//Ode.dVector3 extents = new Ode.dVector3( 1000, 1000, 1000 );
			//rootSpaceID = Ode.dQuadTreeSpaceCreate( dSpaceID.Zero, ref center, ref extents, 10 );
			rootSpaceID = Ode.dHashSpaceCreate( dSpaceID.Zero );
			Ode.dHashSpaceSetLevels( rootSpaceID, ODEPhysicsWorld.Instance.hashSpaceMinLevel,
				ODEPhysicsWorld.Instance.hashSpaceMaxLevel );

			// Create the ODE contact joint group.
			contactJointGroupID = Ode.dJointGroupCreate( 0 );

			// Set the ODE global CFM value that will be used by all Joints
			// (including contacts).  This affects normal Joint constraint
			// operation and Joint limits.  The user cannot adjust CFM, but
			// they can adjust ERP (a.k.a. bounciness/restitution) for materials
			// (i.e. contact settings) and Joint limits.
			Ode.dWorldSetCFM( worldID, Defines.globalCFM );

			// Set the ODE global ERP value.  This will only be used for Joints
			// under normal conditions, not at their limits.  Also, it will not
			// affect contacts at all since they use material properties to
			// calculate ERP.
			Ode.dWorldSetERP( worldID, 0.5f * ( Defines.maxERP + Defines.minERP ) );

			Ode.dWorldSetContactSurfaceLayer( worldID, Defines.surfaceLayer );

			//MaxIterationCount = maxIterationCount;

			//ray for RayCast
			rayCastGeomID = Ode.dCreateRay( rootSpaceID, 1 );
			Ode.dGeomSetData( rayCastGeomID, IntPtr.Zero );

			rayCastResultDistanceComparer = new Comparison<RayCastResult>( SortRayCastResultsMethod );

			unsafe
			{
				Ode.CheckEnumAndStructuresSizes( sizeof( Ode.CollisionEventData ),
					sizeof( Ode.RayCastResult ) );
			}

			neoAxisAdditionsID = Ode.NeoAxisAdditions_Init( Defines.maxContacts, Defines.minERP,
				Defines.maxERP, Defines.maxFriction, Defines.bounceThreshold, worldID, rootSpaceID,
				rayCastGeomID, contactJointGroupID );

			UpdateMaxIterationCount();
			UpdateGravity();
			UpdateMaxAngularSpeed();

			for( int group0 = 0; group0 < 32; group0++ )
				for( int group1 = 0; group1 < 32; group1++ )
					OnUpdateContactGroups( group0, group1, IsContactGroupsContactable( group0, group1 ) );
		}
Example #3
0
        public void Destroy()
        {
            if (shapesDictionary.Count != 0)
            {
                Log.Warning("ODEPhysicsWorld: OnShutdownLibrary: shapesDictionary.Count != 0.");
            }

            if (neoAxisAdditionsID != IntPtr.Zero)
            {
                Ode.NeoAxisAdditions_Shutdown(neoAxisAdditionsID);
                neoAxisAdditionsID = IntPtr.Zero;
            }

            if (rayCastGeomID != dGeomID.Zero)
            {
                Ode.dGeomDestroy(rayCastGeomID);
                rayCastGeomID = dGeomID.Zero;
            }

            if (rootSpaceID != dSpaceID.Zero)
            {
                Ode.dSpaceDestroy(rootSpaceID);
                rootSpaceID = dSpaceID.Zero;
            }

            if (worldID != dWorldID.Zero)
            {
                Ode.dWorldDestroy(worldID);
                worldID = dWorldID.Zero;
            }

            if (contactJointGroupID != dJointGroupID.Zero)
            {
                Ode.dJointGroupDestroy(contactJointGroupID);
                contactJointGroupID = dJointGroupID.Zero;
            }
        }
Example #4
0
		public extern static dJointID dJointCreateContact( dWorldID world, dJointGroupID group, ref dContact contact );
Example #5
0
		public extern static int dWorldGetAutoDisableFlag( dWorldID world );
Example #6
0
		public extern static dReal dWorldGetAutoDisableTime( dWorldID world );
Example #7
0
		public extern static int dWorldGetAutoDisableSteps( dWorldID world );
Example #8
0
		public extern static void dWorldSetMaxAngularSpeed( dWorldID w, dReal max_speed );
Example #9
0
		public extern static void dWorldSetAutoDisableAngularThreshold( dWorldID world, dReal angular_threshold );
Example #10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="World"/> class.
 /// </summary>
 public World()
 {
     id = NativeMethods.dWorldCreate();
 }
Example #11
0
		public extern static void dWorldImpulseToForce( dWorldID world, dReal stepsize, dReal ix, dReal iy, dReal iz, ref dVector3 force );
Example #12
0
		public extern static dReal dWorldGetCFM( dWorldID world );
Example #13
0
        public void Create()
        {
            MaxIterationCount = ODEPhysicsWorld.Instance.defaultMaxIterationCount;

            worldID = Ode.dWorldCreate();

            //Ode.dVector3 center = new Ode.dVector3( 0, 0, 0 );
            //Ode.dVector3 extents = new Ode.dVector3( 1000, 1000, 1000 );
            //rootSpaceID = Ode.dQuadTreeSpaceCreate( dSpaceID.Zero, ref center, ref extents, 10 );
            rootSpaceID = Ode.dHashSpaceCreate(dSpaceID.Zero);
            Ode.dHashSpaceSetLevels(rootSpaceID, ODEPhysicsWorld.Instance.hashSpaceMinLevel,
                                    ODEPhysicsWorld.Instance.hashSpaceMaxLevel);

            // Create the ODE contact joint group.
            contactJointGroupID = Ode.dJointGroupCreate(0);

            // Set the ODE global CFM value that will be used by all Joints
            // (including contacts).  This affects normal Joint constraint
            // operation and Joint limits.  The user cannot adjust CFM, but
            // they can adjust ERP (a.k.a. bounciness/restitution) for materials
            // (i.e. contact settings) and Joint limits.
            Ode.dWorldSetCFM(worldID, Defines.globalCFM);

            // Set the ODE global ERP value.  This will only be used for Joints
            // under normal conditions, not at their limits.  Also, it will not
            // affect contacts at all since they use material properties to
            // calculate ERP.
            Ode.dWorldSetERP(worldID, 0.5f * (Defines.maxERP + Defines.minERP));

            Ode.dWorldSetContactSurfaceLayer(worldID, Defines.surfaceLayer);

            //MaxIterationCount = maxIterationCount;

            //ray for RayCast
            rayCastGeomID = Ode.dCreateRay(rootSpaceID, 1);
            Ode.dGeomSetData(rayCastGeomID, IntPtr.Zero);

            rayCastResultDistanceComparer = new Comparison <RayCastResult>(SortRayCastResultsMethod);

            unsafe
            {
                Ode.CheckEnumAndStructuresSizes(sizeof(Ode.CollisionEventData),
                                                sizeof(Ode.RayCastResult));
            }

            neoAxisAdditionsID = Ode.NeoAxisAdditions_Init(Defines.maxContacts, Defines.minERP,
                                                           Defines.maxERP, Defines.maxFriction, Defines.bounceThreshold, worldID, rootSpaceID,
                                                           rayCastGeomID, contactJointGroupID);

            UpdateMaxIterationCount();
            UpdateGravity();
            UpdateMaxAngularSpeed();

            for (int group0 = 0; group0 < 32; group0++)
            {
                for (int group1 = 0; group1 < 32; group1++)
                {
                    OnUpdateContactGroups(group0, group1, IsContactGroupsContactable(group0, group1));
                }
            }
        }
Example #14
0
 public World()
 {
     ptr          = ode.dWorldCreate();
     contactgroup = ode.dJointGroupCreate(0);
     jointgroup   = ode.dJointGroupCreate(0);
 }
Example #15
0
		public extern static dJointID dJointCreateUniversal( dWorldID world, dJointGroupID group );
Example #16
0
		public extern static dJointID dJointCreateLMotor( dWorldID world, dJointGroupID group );
Example #17
0
		public extern static void dWorldQuickStep( dWorldID world, dReal stepsize );
Example #18
0
		public extern static void dWorldSetAutoDisableLinearThreshold( dWorldID world, dReal linear_threshold );
Example #19
0
		public extern static void dWorldSetQuickStepNumIterations( dWorldID world, int num );
Example #20
0
		public extern static dReal dWorldGetAutoDisableAngularThreshold( dWorldID world );
Example #21
0
		public extern static int dWorldGetQuickStepNumIterations( dWorldID world );
Example #22
0
		public extern static void dWorldSetAutoDisableSteps( dWorldID world, int steps );
Example #23
0
		public extern static void dWorldSetQuickStepW( dWorldID world, dReal over_relaxation );
Example #24
0
		public extern static void dWorldSetAutoDisableTime( dWorldID world, dReal time );
Example #25
0
		public extern static dReal dWorldGetQuickStepW( dWorldID world );
Example #26
0
		public extern static void dWorldSetAutoDisableFlag( dWorldID world, int do_auto_disable );
Example #27
0
		public extern static void dWorldSetContactMaxCorrectingVel( dWorldID world, dReal vel );
Example #28
0
		public extern static dBodyID dBodyCreate( dWorldID world );
Example #29
0
		public extern static dReal dWorldGetContactMaxCorrectingVel( dWorldID world );
Example #30
0
		public extern static dJointID dJointCreateHinge2( dWorldID world, dJointGroupID group );
Example #31
0
		public extern static void dWorldSetContactSurfaceLayer( dWorldID world, dReal depth );
Example #32
0
		public extern static dJointID dJointCreateFixed( dWorldID world, dJointGroupID group );
Example #33
0
		public extern static dReal dWorldGetContactSurfaceLayer( dWorldID world );
Example #34
0
		public extern static dNeoAxisAdditionsID NeoAxisAdditions_Init( int maxContacts,
			float minERP, float maxERP, float maxFriction, float bounceThreshold, dWorldID worldID,
			dSpaceID rootSpaceID, dGeomID rayCastGeomID, dJointGroupID contactJointGroupID );
Example #35
0
		public extern static void dWorldStepFast1( dWorldID world, dReal stepsize, int maxiterations );