void simLoop(int pause) { if (!pause) { const dReal timestep = 0.005; // this does a hard-coded circular motion animation static float t=0; t += timestep/4; if (t > 2*M_PI) t = 0; dReal px = cos(t); dReal py = sin(t); dReal vx = -sin(t)/4; dReal vy = cos(t)/4; kbody->setPosition(px, py, .5); kbody->setLinearVel(vx, vy, 0); // end of hard-coded animation space->collide(0, nearCallback); removeQueued(); world->quickStep(timestep); joints.clear(); } dVector3 lengths; // the moving platform kbox->getLengths(lengths); dsSetTexture(DS_WOOD); dsSetColor(.3, .3, 1); dsDrawBox(kbox->getPosition(), kbox->getRotation(), lengths); dReal length, radius; kpole->getParams(&radius, &length); dsSetTexture(DS_CHECKERED); dsSetColor(1, 1, 0); dsDrawCylinder(kpole->getPosition(), kpole->getRotation(), length, radius); // the matraca matraca_geom->getLengths(lengths); dsSetColor(1,0,0); dsSetTexture(DS_WOOD); dsDrawBox(matraca_geom->getPosition(), matraca_geom->getRotation(), lengths); // and the boxes for_each(boxes.begin(), boxes.end(), mem_fun(&Box::draw)); }
void simLoop(int pause) { if (!pause) { const dReal timestep = 0.04; // this does a hard-coded circular motion animation static float t=0; t += timestep/4; if (t > 2*M_PI) t = 0; dVector3 next_pos = { cos(t), sin(t), 0.5}; dVector3 vel; // vel = (next_pos - cur_pos) / timestep dSubtractVectors3(vel, next_pos, kbody->getPosition()); dScaleVector3(vel, 1/timestep); kbody->setLinearVel(vel); // end of hard-coded animation space->collide(0, nearCallback); removeQueued(); world->quickStep(timestep); joints.clear(); } dVector3 lengths; // the moving platform kbox->getLengths(lengths); dsSetTexture(DS_WOOD); dsSetColor(.3, .3, 1); dsDrawBox(kbox->getPosition(), kbox->getRotation(), lengths); dReal length, radius; kpole->getParams(&radius, &length); dsSetTexture(DS_CHECKERED); dsSetColor(1, 1, 0); dsDrawCylinder(kpole->getPosition(), kpole->getRotation(), length, radius); // the matraca matraca_geom->getLengths(lengths); dsSetColor(1,0,0); dsSetTexture(DS_WOOD); dsDrawBox(matraca_geom->getPosition(), matraca_geom->getRotation(), lengths); // and the boxes for_each(boxes.begin(), boxes.end(), mem_fun(&Box::draw)); }