Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's C++ page.

 

 

 

 

 

(C++) HelloOdeWindows

 

Technical facts

 

Operating system(s) or programming environment(s)

IDE(s):

Project type:

C++ standard:

Compiler(s):

Libraries used:

 

 

 

 

 

Qt project file: ./CppHelloOdeWindows/CppHelloOdeWindows.pro

 

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.cpp

 

 

 

 

 

./CppHelloOdeWindows/main.cpp

 

#define dSINGLE
//D:\Projects\Libraries\ode-0.12\include\ode\common.h

//From http://ode-wiki.org/wiki/index.php?title=HOWTO_simple_bouncing_sphere
#include <ode/ode.h>
#include <drawstuff/drawstuff.h>

// dynamics and collision objects
static dWorldID world;
static dSpaceID space;
static dBodyID body;
static dGeomID geom;
static dMass m;
static dJointGroupID contactgroup;

// this is called by dSpaceCollide when two objects in space are
// potentially colliding.
static void nearCallback (void *data, dGeomID o1, dGeomID o2)
{

    dBodyID b1 = dGeomGetBody(o1);
    dBodyID b2 = dGeomGetBody(o2);
    dContact contact;
    contact.surface.mode = dContactBounce | dContactSoftCFM;
    // friction parameter
    contact.surface.mu = dInfinity;
    // bounce is the amount of "bouncyness".
    contact.surface.bounce = 0.9;
    // bounce_vel is the minimum incoming velocity to cause a bounce
    contact.surface.bounce_vel = 0.1;
    // constraint force mixing parameter
    contact.surface.soft_cfm = 0.001;
    if (int numc = dCollide (o1,o2,1,&contact.geom,sizeof(dContact))) {
        dJointID c = dJointCreateContact (world,contactgroup,&contact);
        dJointAttach (c,b1,b2);
    }
}

// start simulation - set viewpoint
static void start()
{
    static float xyz[3] = {2.0f,-2.0f,1.7600f};
    static float hpr[3] = {140.000f,-17.0000f,0.0000f};
    dsSetViewpoint (xyz,hpr);
}

// simulation loop
static void simLoop (int pause)
{
    const dReal *pos;
    const dReal *R;
    // find collisions and add contact joints
    dSpaceCollide (space,0,&nearCallback);
    // step the simulation
    dWorldQuickStep (world,0.01);
    // remove all contact joints
    dJointGroupEmpty (contactgroup);
    // redraw sphere at new location
    pos = dGeomGetPosition (geom);
    R = dGeomGetRotation (geom);
    dsDrawSphere(pos,R,dGeomSphereGetRadius (geom));
}

int main (int argc, char **argv)
{
    // setup pointers to drawstuff callback functions
    dsFunctions fn;
    fn.version = DS_VERSION;
    fn.start = &start;
    fn.step = &simLoop;
    fn.stop = 0;
    fn.command = 0;
    fn.path_to_textures = "../../drawstuff/textures";

    dInitODE ();
    // create world
    world = dWorldCreate ();
    space = dHashSpaceCreate (0);
    dWorldSetGravity (world,0,0,-0.2);
    dWorldSetCFM (world,1e-5);
    dCreatePlane (space,0,0,1,0);
    contactgroup = dJointGroupCreate (0);
    // create object
    body = dBodyCreate (world);
    geom = dCreateSphere (space,0.5);
    dMassSetSphere (&m,1,0.5);
    dBodySetMass (body,&m);
    dGeomSetBody (geom,body);
    // set initial position
    dBodySetPosition (body,0,0,3);
    // run simulation
    dsSimulationLoop (argc,argv,352,288,&fn);
    // clean up
    dJointGroupDestroy (contactgroup);
    dSpaceDestroy (space);
    dWorldDestroy (world);
    dCloseODE();
}

/*

DEFINES += dDOUBLE
DEFINES += CCD_DOUBLE

HEADERS += \
    ../../Libraries/ode-0.12/ode/src/array.h \
    ../../Libraries/ode-0.12/ode/src/collision_kernel.h \
    ../../Libraries/ode-0.12/ode/src/collision_libccd.h \
    ../../Libraries/ode-0.12/ode/src/collision_space_internal.h \
    ../../Libraries/ode-0.12/ode/src/collision_std.h \
    ../../Libraries/ode-0.12/ode/src/collision_transform.h \
    ../../Libraries/ode-0.12/ode/src/collision_trimesh_colliders.h \
    ../../Libraries/ode-0.12/ode/src/collision_trimesh_internal.h \
    ../../Libraries/ode-0.12/ode/src/collision_util.h \
    ../../Libraries/ode-0.12/ode/src/config.h \
    ../../Libraries/ode-0.12/ode/src/heightfield.h \
    ../../Libraries/ode-0.12/ode/src/lcp.h \
    ../../Libraries/ode-0.12/ode/src/mat.h \
    ../../Libraries/ode-0.12/ode/src/objects.h \
    ../../Libraries/ode-0.12/ode/src/obstack.h \
    ../../Libraries/ode-0.12/ode/src/odeou.h \
    ../../Libraries/ode-0.12/ode/src/odetls.h \
    ../../Libraries/ode-0.12/ode/src/quickstep.h \
    ../../Libraries/ode-0.12/ode/src/step.h \
    ../../Libraries/ode-0.12/ode/src/util.h \
    ../../Libraries/ode-0.12/ode/src/joints/amotor.h \
    ../../Libraries/ode-0.12/ode/src/joints/ball.h \
    ../../Libraries/ode-0.12/ode/src/joints/contact.h \
    ../../Libraries/ode-0.12/ode/src/joints/fixed.h \
    ../../Libraries/ode-0.12/ode/src/joints/hinge.h \
    ../../Libraries/ode-0.12/ode/src/joints/hinge2.h \
    ../../Libraries/ode-0.12/ode/src/joints/joint.h \
    ../../Libraries/ode-0.12/ode/src/joints/joint_internal.h \
    ../../Libraries/ode-0.12/ode/src/joints/joints.h \
    ../../Libraries/ode-0.12/ode/src/joints/lmotor.h \
    ../../Libraries/ode-0.12/ode/src/joints/null.h \
    ../../Libraries/ode-0.12/ode/src/joints/piston.h \
    ../../Libraries/ode-0.12/ode/src/joints/plane2d.h \
    ../../Libraries/ode-0.12/ode/src/joints/pr.h \
    ../../Libraries/ode-0.12/ode/src/joints/pu.h \
    ../../Libraries/ode-0.12/ode/src/joints/slider.h \
    ../../Libraries/ode-0.12/ode/src/joints/universal.h \
    ../../Libraries/ode-0.12/ode/src/../../Include/drawstuff/drawstuff.h

SOURCES += \
    ../../Libraries/ode-0.12/ode/src/array.cpp \
    ../../Libraries/ode-0.12/ode/src/box.cpp \
    ../../Libraries/ode-0.12/ode/src/capsule.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_cylinder_box.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_cylinder_plane.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_cylinder_sphere.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_cylinder_trimesh.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_kernel.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_libccd.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_quadtreespace.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_sapspace.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_space.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_transform.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_trimesh_box.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_trimesh_ccylinder.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_trimesh_disabled.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_trimesh_distance.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_trimesh_gimpact.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_trimesh_opcode.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_trimesh_plane.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_trimesh_ray.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_trimesh_sphere.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_trimesh_trimesh.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_trimesh_trimesh_new.cpp \
    ../../Libraries/ode-0.12/ode/src/collision_util.cpp \
    ../../Libraries/ode-0.12/ode/src/convex.cpp \
    ../../Libraries/ode-0.12/ode/src/cylinder.cpp \
    ../../Libraries/ode-0.12/ode/src/error.cpp \
    ../../Libraries/ode-0.12/ode/src/export-dif.cpp \
    ../../Libraries/ode-0.12/ode/src/fastdot.c \
    ../../Libraries/ode-0.12/ode/src/fastldlt.c \
    ../../Libraries/ode-0.12/ode/src/fastlsolve.c \
    ../../Libraries/ode-0.12/ode/src/fastltsolve.c \
    ../../Libraries/ode-0.12/ode/src/heightfield.cpp \
    ../../Libraries/ode-0.12/ode/src/lcp.cpp \
    ../../Libraries/ode-0.12/ode/src/mass.cpp \
    ../../Libraries/ode-0.12/ode/src/mat.cpp \
    ../../Libraries/ode-0.12/ode/src/matrix.cpp \
    ../../Libraries/ode-0.12/ode/src/memory.cpp \
    ../../Libraries/ode-0.12/ode/src/misc.cpp \
    ../../Libraries/ode-0.12/ode/src/nextafterf.c \
    ../../Libraries/ode-0.12/ode/src/obstack.cpp \
    ../../Libraries/ode-0.12/ode/src/ode.cpp \
    ../../Libraries/ode-0.12/ode/src/odeinit.cpp \
    ../../Libraries/ode-0.12/ode/src/odemath.cpp \
    ../../Libraries/ode-0.12/ode/src/odeou.cpp \
    ../../Libraries/ode-0.12/ode/src/odetls.cpp \
    ../../Libraries/ode-0.12/ode/src/plane.cpp \
    ../../Libraries/ode-0.12/ode/src/quickstep.cpp \
    ../../Libraries/ode-0.12/ode/src/ray.cpp \
    ../../Libraries/ode-0.12/ode/src/rotation.cpp \
    ../../Libraries/ode-0.12/ode/src/sphere.cpp \
    ../../Libraries/ode-0.12/ode/src/step.cpp \
    ../../Libraries/ode-0.12/ode/src/timer.cpp \
    ../../Libraries/ode-0.12/ode/src/util.cpp \
    ../../Libraries/ode-0.12/ode/src/joints/amotor.cpp \
    ../../Libraries/ode-0.12/ode/src/joints/ball.cpp \
    ../../Libraries/ode-0.12/ode/src/joints/contact.cpp \
    ../../Libraries/ode-0.12/ode/src/joints/fixed.cpp \
    ../../Libraries/ode-0.12/ode/src/joints/hinge.cpp \
    ../../Libraries/ode-0.12/ode/src/joints/hinge2.cpp \
    ../../Libraries/ode-0.12/ode/src/joints/joint.cpp \
    ../../Libraries/ode-0.12/ode/src/joints/lmotor.cpp \
    ../../Libraries/ode-0.12/ode/src/joints/null.cpp \
    ../../Libraries/ode-0.12/ode/src/joints/piston.cpp \
    ../../Libraries/ode-0.12/ode/src/joints/plane2d.cpp \
    ../../Libraries/ode-0.12/ode/src/joints/pr.cpp \
    ../../Libraries/ode-0.12/ode/src/joints/pu.cpp \
    ../../Libraries/ode-0.12/ode/src/joints/slider.cpp \
    ../../Libraries/ode-0.12/ode/src/joints/universal.cpp

*/

 

 

 

 

 

Go back to Richel Bilderbeek's C++ page.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict

This page has been created by the tool CodeToHtml