[ODE] Holding bodies like in HL2

michael kapelko kornerr at gmail.com
Tue Sep 12 03:08:44 MST 2006

I added ray for a player and when I do dGeomRaySet (ray, pos, dir) my 
player flies away from the map into the sky...
I don't do any collision detection with ray, I just added it and update 
its position + direction every graphics update, and this somehow causes 
the player to fly away into the sky.

SRC: http://kornerr.alfamoon.com/download/12.tar.bz2
It requires Irrlicht >= 1.1.
The physics player code is found in src/phys/player.{h,cpp}
and wrapper around graphics and physics representations is located in 
Update function looks like:
void WrapPlayer::Update () {
    // Make capsule standing
    dQuaternion q;
    dQFromAxisAndAngle (q, 1, 0, 0, DegreeToRadian (90));
    dBodySetQuaternion (pp->GetBody (), q);
    // Decrease body speed after releasing move buttons
    const dReal *av = dBodyGetAngularVel (pp->GetBody ());
    const float D = 1.2;
    dBodySetAngularVel (pp->GetBody (), av[0] / D, av[1] / D, av[2] / D);
    // Update camera position
    const dReal *pos = dBodyGetPosition (pp->GetBody ());
    cam->setPosition (vector3df (pos[0], pos[1], pos[2]));
    // Make gun_ray point where cam points
    vector3df cp (cam->getPosition ());
    vector3df cd (cam->getTarget ());
    dGeomRaySet (pp->GetGunRay (), cp.X, cp.Y, cp.Z, cd.X, cd.Y, cd.Z);

More information about the ODE mailing list