本文整理汇总了C++中dJointAttach函数的典型用法代码示例。如果您正苦于以下问题:C++ dJointAttach函数的具体用法?C++ dJointAttach怎么用?C++ dJointAttach使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了dJointAttach函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: vwmax
osaODEServoMotor::osaODEServoMotor(dWorldID world,
dBodyID body1,
dBodyID body2,
const vctFixedSizeVector<double,3>& axis,
double vwmax,
double ftmax,
dJointType motortype ) :
vwmax( fabs( vwmax ) ),
ftmax( fabs( ftmax ) ) {
if( motortype == dJointTypeHinge ){
motorid = dJointCreateAMotor( world, 0 ); // create the motor
dJointAttach( MotorID(), body1, body2 ); // attach the joint
dJointSetAMotorMode( MotorID(), dAMotorUser ); // motor is in user mode
dJointSetAMotorNumAxes( MotorID(), 1 ); // only 1 axis
dJointSetAMotorAxis( MotorID(), 0, 2, axis[0], axis[1], axis[2] );
SetVelocity( 0.0 ); // idle the motor
}
if( motortype == dJointTypeSlider ){
motorid = dJointCreateLMotor( world, 0 ); // create the motor
dJointAttach( MotorID(), body1, body2 ); // attach the joint
dJointSetLMotorNumAxes( MotorID(), 1 ); // 1 axis
dJointSetLMotorAxis( MotorID(), 0, 2, axis[0], axis[1], axis[2] );
SetVelocity( 0.0 ); // idle the motor
}
}
开发者ID:jhu-saw,项目名称:sawOpenDynamicsEngine,代码行数:30,代码来源:osaODEServoMotor.cpp
示例2: PCylinder
// ang2 = position angle
// ang = rotation angle
Robot::Wheel::Wheel(Robot* robot,int _id,float ang,float ang2,int wheeltexid)
{
id = _id;
rob = robot;
float rad = rob->cfg->robotSettings.RobotRadius - rob->cfg->robotSettings.WheelThickness / 2.0;
ang *= M_PI/180.0f;
ang2 *= M_PI/180.0f;
float x = rob->m_x;
float y = rob->m_y;
float z = rob->m_z;
float centerx = x+rad*cos(ang2);
float centery = y+rad*sin(ang2);
float centerz = z-rob->cfg->robotSettings.RobotHeight*0.5+rob->cfg->robotSettings.WheelRadius-rob->cfg->robotSettings.BottomHeight;
cyl = new PCylinder(centerx,centery,centerz,rob->cfg->robotSettings.WheelRadius,rob->cfg->robotSettings.WheelThickness,rob->cfg->robotSettings.WheelMass,0.9,0.9,0.9,wheeltexid);
cyl->setRotation(-sin(ang),cos(ang),0,M_PI*0.5);
cyl->setBodyRotation(-sin(ang),cos(ang),0,M_PI*0.5,true); //set local rotation matrix
cyl->setBodyPosition(centerx-x,centery-y,centerz-z,true); //set local position vector
cyl->space = rob->space;
rob->w->addObject(cyl);
joint = dJointCreateHinge (rob->w->world,0);
dJointAttach (joint,rob->chassis->body,cyl->body);
const dReal *a = dBodyGetPosition (cyl->body);
dJointSetHingeAxis (joint,cos(ang),sin(ang),0);
dJointSetHingeAnchor (joint,a[0],a[1],a[2]);
motor = dJointCreateAMotor(rob->w->world,0);
dJointAttach(motor,rob->chassis->body,cyl->body);
dJointSetAMotorNumAxes(motor,1);
dJointSetAMotorAxis(motor,0,1,cos(ang),sin(ang),0);
dJointSetAMotorParam(motor,dParamFMax,rob->cfg->robotSettings.Wheel_Motor_FMax);
speed = 0;
}
开发者ID:KRSSG,项目名称:robocupssl_old,代码行数:37,代码来源:robot.cpp
示例3: dBodyCreate
void TrackedVehicle::create() {
this->vehicleBody = dBodyCreate(this->environment->world);
this->vehicleGeom = dCreateBox(this->environment->space, this->leftTrack->m->distance, this->width, this->leftTrack->m->radius[0]);
this->environment->setGeomName(this->vehicleGeom, name + ".vehicleGeom");
dMassSetBox(&this->vehicleMass, this->density, this->leftTrack->m->distance, this->width, this->leftTrack->m->radius[0]);
//dMassAdjust(&this->vehicleMass, 2.40);
dGeomSetCategoryBits(this->vehicleGeom, Category::OBSTACLE);
dGeomSetCollideBits(this->vehicleGeom, Category::OBSTACLE | Category::TERRAIN);
dBodySetMass(this->vehicleBody, &this->vehicleMass);
dGeomSetBody(this->vehicleGeom, this->vehicleBody);
dGeomSetOffsetPosition(this->vehicleGeom, 0, 0, this->leftTrack->m->radius[0]);
this->leftTrack->create();
this->rightTrack->create();
dReal w = this->width + 2*trackWidth + 2 * trackVehicleSpace;
dRigidBodyArraySetPosition(leftTrack->bodyArray, -wheelBase/2, -(w - trackWidth)/2, 0);
dRigidBodyArraySetPosition(rightTrack->bodyArray, -wheelBase/2, (w - trackWidth)/2, 0);
this->leftTrackJoint = dJointCreateFixed(this->environment->world, 0);
this->rightTrackJoint = dJointCreateFixed(this->environment->world, 0);
dJointAttach(this->leftTrackJoint, this->vehicleBody, this->leftTrack->trackBody);
dJointAttach(this->rightTrackJoint, this->vehicleBody, this->rightTrack->trackBody);
dJointSetFixed(this->leftTrackJoint);
dJointSetFixed(this->rightTrackJoint);
this->bodyArray = dRigidBodyArrayCreate(this->vehicleBody);
dRigidBodyArrayAdd(this->bodyArray, this->leftTrack->bodyArray);
dRigidBodyArrayAdd(this->bodyArray, this->rightTrack->bodyArray);
}
开发者ID:fferri,项目名称:tvs,代码行数:30,代码来源:TrackedVehicle.cpp
示例4: obja_
Rope::Rope(Object* obja, Body* bodya, Object* objb, Body* bodyb)
: obja_(obja), objb_(objb), selected_(false)
{
vec apos = bodya->position();
proxya_.set_position(apos);
proxya_.set_velocity(bodya->velocity());
proxya_.set_mass(0.01, 1);
hingea_ = dJointCreateHinge(LEVEL->world, 0);
dJointAttach(hingea_, proxya_.body_id(), bodya->body_id());
dJointSetHingeAxis(hingea_, 0, 0, 1);
vec bpos = bodyb->position();
proxyb_.set_position(bpos);
proxyb_.set_velocity(bodyb->velocity());
proxyb_.set_mass(0.01, 1);
hingeb_ = dJointCreateHinge(LEVEL->world, 0);
dJointAttach(hingeb_, proxyb_.body_id(), bodyb->body_id());
dJointSetHingeAxis(hingeb_, 0, 0, 1);
rope_ = dJointCreateSlider(LEVEL->world, 0);
vec axis = bpos - apos;
dJointAttach(rope_, proxya_.body_id(), proxyb_.body_id());
dJointSetSliderAxis(rope_, axis.x, axis.y, 0);
dJointSetSliderParam(rope_, dParamLoStop, 0);
dJointSetSliderParam(rope_, dParamStopCFM, 0.25);
dJointSetSliderParam(rope_, dParamStopERP, 0.01);
ext_ = base_ext_ = axis.norm();
}
开发者ID:codders,项目名称:soylent,代码行数:30,代码来源:objects.cpp
示例5: dCollide
void CProtoHapticDoc::nearCallback(dGeomID o1, dGeomID o2)
{
int index1= (int)dGeomGetData(o1);
int index2= (int)dGeomGetData(o2);
if(m_shapes[index1]->isCollisionDynamic() ||
m_shapes[index2]->isCollisionDynamic()) {
int n, i;
const int N = 50;
dContact contact[N];
n = dCollide (o1,o2,N,&contact[0].geom,sizeof(dContact));
if (n > 0) {
OutputDebugString("Collision\n");
for (i=0; i<n; i++) {
contact[i].surface.mode = dContactSlip1 | dContactSlip2 | dContactSoftERP | dContactSoftCFM | dContactApprox1;
if (dGeomGetClass(o1) == dSphereClass || dGeomGetClass(o2) == dSphereClass)
contact[i].surface.mu = 20;
else
contact[i].surface.mu = 0.5;
contact[i].surface.slip1 = 1.0 - (m_shapes[index1]->getSurfaceFriction());
contact[i].surface.slip2 = 1.0 - (m_shapes[index2]->getSurfaceFriction());
contact[i].surface.soft_erp = 0.8;
contact[i].surface.soft_cfm = 0.01;
dJointID c = dJointCreateContact (m_worldID,m_jointGroup,contact+i);
dJointAttach (c,dGeomGetBody(o1),dGeomGetBody(o2));
}
}
}
}
开发者ID:neilforrest,项目名称:protohaptic,代码行数:31,代码来源:ProtoHapticDoc.cpp
示例6: createInvisibleHead
void createInvisibleHead( float* pos )
{
dMatrix3 head_orientation;
dRFromEulerAngles(head_orientation, 0.0, 0.0, 0.0);
//position and orientation
head.Body = dBodyCreate(World);
dBodySetPosition(head.Body, pos[ 0 ], pos[ 1 ], pos[ 2 ]);
dBodySetRotation(head.Body, head_orientation);
dBodySetLinearVel(head.Body, 0, 0, 0);
dBodySetData(head.Body, (void *)0);
//mass
dMass head_mass;
dMassSetBox(&head_mass, 1.0, 1.0, 1.0, 1.0);
dBodySetMass(head.Body, &head_mass);
//geometry
head.Geom = dCreateBox(Space, 1.0, 1.0, 1.0);
dGeomSetBody(head.Geom, head.Body);
//fixed joint
invis_box_joint = dJointCreateFixed(World, jointgroup);
dJointAttach(invis_box_joint, body.Body, head.Body);
dJointSetFixed(invis_box_joint);
}
开发者ID:bmarcott,项目名称:cs275,代码行数:26,代码来源:main.cpp
示例7: createBallandPole
// Create a ball and a pole
void createBallandPole() {
dMass m1;
dReal x0 = 0.0, y0 = 0.0, z0 = 2.5;
// ball
ball.radius = 0.2;
ball.mass = 1.0;
ball.body = dBodyCreate(world);
dMassSetZero(&m1);
dMassSetSphereTotal(&m1, ball.mass, ball.radius);
dBodySetMass(ball.body, &m1);
dBodySetPosition(ball.body, x0, y0, z0);
ball.geom = dCreateSphere(space, ball.radius);
dGeomSetBody(ball.geom, ball.body);
// pole
pole.radius = 0.025;
pole.length = 1.0;
pole.mass = 1.0;
pole.body = dBodyCreate(world);
dMassSetZero(&m1);
dMassSetCapsule(&m1, pole.mass, 3, pole.radius, pole.length);
dBodySetMass(pole.body, &m1);
dBodySetPosition(pole.body, x0, y0, z0 - 0.5 * pole.length);
pole.geom = dCreateCCylinder(space, pole.radius, pole.length);
dGeomSetBody(pole.geom, pole.body);
// hinge joint
joint = dJointCreateHinge(world, 0);
dJointAttach(joint, ball.body, pole.body);
dJointSetHingeAnchor(joint, x0, y0, z0 - ball.radius);
dJointSetHingeAxis(joint, 1, 0, 0);
}
开发者ID:rk0dama,项目名称:InvertedPendulum,代码行数:36,代码来源:main.cpp
示例8: dBodyCreate
void Robots::construirChassi(dWorldID world)
{
for (int i=0; i < 2; i++)
{
// Cria objeto e geometria
this->body[i] = dBodyCreate(world);
this->box[i] = dCreateBox(0,LENGTH/(1+i),WIDTH,HEIGHT);
// Define a posição do objeto
dBodySetPosition(this->body[i],this->pegarX(),this->pegarY(),STARTZ+HEIGHT/2-HEIGHT*i);
// Se o robô for do segundo time, deve ser rotacionado em 180 graus
if ((this->id == 3) || (this->id == 4) || (this->id == 5))
{
dQuaternion q;
dQFromAxisAndAngle(q,0,0,1,M_PI);
dBodySetQuaternion(this->body[i],q);
}
// Define a massa do objeto
dMass m;
dMassSetBox(&m,1,LENGTH/(1+i),WIDTH,HEIGHT); // O segundo bloco é mais curto
dMassAdjust(&m,CMASS*(1+i*2)); // O segundo bloco é mais pesado
dBodySetMass(this->body[i],&m);
// Associa o objeto à sua geometria
dGeomSetBody(this->box[i],this->body[i]);
}
// O chassis é composto por dois blocos que são fixos entre si
dJointID fixed = dJointCreateFixed(world,0);
dJointAttach(fixed,this->body[1],this->body[0]);
dJointSetFixed(fixed);
}
开发者ID:unball,项目名称:ieee-very-small-2012,代码行数:34,代码来源:RobotsSimulation.cpp
示例9: nearCallback
static void nearCallback (void *data, dGeomID o1, dGeomID o2)
{
assert(o1);
assert(o2);
if (dGeomIsSpace(o1) || dGeomIsSpace(o2))
{
fprintf(stderr,"testing space %p %p\n", o1,o2);
// colliding a space with something
dSpaceCollide2(o1,o2,data,&nearCallback);
// Note we do not want to test intersections within a space,
// only between spaces.
return;
}
const int N = 32;
dContact contact[N];
int n = dCollide (o1,o2,N,&(contact[0].geom),sizeof(dContact));
if (n > 0)
{
for (int i=0; i<n; i++)
{
contact[i].surface.mode = dContactSoftERP | dContactSoftCFM | dContactApprox1;
contact[i].surface.mu = 100.0;
contact[i].surface.soft_erp = 0.96;
contact[i].surface.soft_cfm = 0.02;
dJointID c = dJointCreateContact (world,contactgroup,&contact[i]);
dJointAttach (c,
dGeomGetBody(contact[i].geom.g1),
dGeomGetBody(contact[i].geom.g2));
}
}
}
开发者ID:BenitoJedai,项目名称:jslibs,代码行数:33,代码来源:demo_feedback.cpp
示例10: dJointCreateFixed
void Spikey::stick(Body* b) {
if (hinge_) dJointDestroy(hinge_);
hinge_ = dJointCreateFixed(LEVEL->world, 0);
dJointAttach(hinge_, body_.body_id(), b ? b->body_id() : 0);
dJointSetFixed(hinge_);
state_ = STUCK;
}
开发者ID:codders,项目名称:soylent,代码行数:7,代码来源:objects.cpp
示例11: dGeomGetBody
void PhysicsWorld::collide(void *_data, dGeomID _o1, dGeomID _o2)
{
int i;
//std::cout<<"collide\n";
// exit without doing anything if the two bodies are connected by a joint
dBodyID b1 = dGeomGetBody(_o1);
dBodyID b2 = dGeomGetBody(_o2);
if (b1 && b2 && dAreConnectedExcluding (b1,b2,dJointTypeContact)) return;
for (i=0; i<m_maxContacts; i++)
{
m_contact[i].surface.mode = dContactBounce;// | dContactSoftCFM;
m_contact[i].surface.mu = dInfinity;
m_contact[i].surface.mu2 = 0;
m_contact[i].surface.bounce = 0.3;
m_contact[i].surface.bounce_vel = 0.1;
m_contact[i].surface.soft_cfm = 0.01;
}
if (int numc = dCollide (_o1,_o2,m_maxContacts,&m_contact[0].geom,sizeof(dContact)))
{
dMatrix3 RI;
dRSetIdentity (RI);
const dReal ss[3] = {0.02,0.02,0.02};
for (i=0; i<numc; i++)
{
dJointID c = dJointCreateContact (m_world,m_contactgroup,m_contact+i);
dJointAttach (c,b1,b2);
}
}
}
开发者ID:NCCA,项目名称:NGL6Demos,代码行数:30,代码来源:CollisionFunction.cpp
示例12: PBox
Robot::Kicker::Kicker(Robot* robot)
{
rob = robot;
float x = rob->m_x;
float y = rob->m_y;
float z = rob->m_z;
float centerx = x+(rob->cfg->robotSettings.RobotCenterFromKicker+rob->cfg->robotSettings.KickerThickness);
float centery = y;
float centerz = z-(rob->cfg->robotSettings.RobotHeight)*0.5f+rob->cfg->robotSettings.WheelRadius-rob->cfg->robotSettings.BottomHeight+rob->cfg->robotSettings.KickerZ;
box = new PBox(centerx,centery,centerz,rob->cfg->robotSettings.KickerThickness,rob->cfg->robotSettings.KickerWidth,rob->cfg->robotSettings.KickerHeight,rob->cfg->robotSettings.KickerMass,0.9,0.9,0.9);
box->setBodyPosition(centerx-x,centery-y,centerz-z,true);
box->space = rob->space;
rob->w->addObject(box);
joint = dJointCreateHinge (rob->w->world,0);
dJointAttach (joint,rob->chassis->body,box->body);
const dReal *aa = dBodyGetPosition (box->body);
dJointSetHingeAnchor (joint,aa[0],aa[1],aa[2]);
dJointSetHingeAxis (joint,0,-1,0);
dJointSetHingeParam (joint,dParamVel,0);
dJointSetHingeParam (joint,dParamLoStop,0);
dJointSetHingeParam (joint,dParamHiStop,0);
rolling = 0;
kicking = false;
}
开发者ID:KRSSG,项目名称:robocupssl_old,代码行数:29,代码来源:robot.cpp
示例13: nearCallback
void nearCallback(void *data, dGeomID o1, dGeomID o2) {
State* state = (State*)data;
if(dGeomIsSpace(o1) || dGeomIsSpace(o2)) {
dSpaceCollide2(o1, o2, data, &nearCallback);
if(dGeomIsSpace(o1))
dSpaceCollide((dSpaceID)o1, data, &nearCallback);
if(dGeomIsSpace(o2))
dSpaceCollide((dSpaceID)o2, data, &nearCallback);
} else {
dBodyID b1 = dGeomGetBody(o1);
dBodyID b2 = dGeomGetBody(o2);
const int MAX_CONTACTS = 18;
dContact contact[MAX_CONTACTS];
for(int i = 0; i < MAX_CONTACTS; i++) {
contact[i].surface.mode = dContactBounce;
contact[i].surface.mu = 2000;
contact[i].surface.bounce = 0.1;
contact[i].surface.bounce_vel = 0.15;
}
if(int numc = dCollide(o1, o2, MAX_CONTACTS, &contact[0].geom, sizeof(dContact))) {
for(int i = 0; i < numc; i++) {
dJointID c = dJointCreateContact(state->world, state->physicsContactgroup, &contact[i]);
dJointAttach(c, b1, b2);
}
}
}
}
开发者ID:xenris,项目名称:ode-car-jump,代码行数:32,代码来源:main.cpp
示例14: dGeomGetBody
//description
//Default behavior.
//Default collision of bodies
void ODEBaseScene::Collide(dGeomID g1, dGeomID g2)
{
int n;
dBodyID b1 = dGeomGetBody(g1);
dBodyID b2 = dGeomGetBody(g2);
if (b1 && b2 && dAreConnected(b1, b2))
return;
const int N = 4;
dContact contact[N];
n = dCollide (g1,g2,N,&contact[0].geom,sizeof(dContact));
if (n > 0)
{
// printf("Body %d hits body %d.\n", (size_t) dGeomGetData(g1),(size_t) dGeomGetData(g2));
for (int i=0; i<n; ++i)
{
// contact[i].surface.mode = dContactBounce | dContactSoftCFM;
contact[i].surface.mode = dContactBounce;
//contact[i].surface.mu = dInfinity;
contact[i].surface.mu = 0.5;
//contact[i].surface.mu2 = 0.5;
contact[i].surface.bounce = 0.000999990;
//contact[i].surface.bounce_vel = 0.1;
//contact[i].surface.soft_cfm = 0.001;
//contact[i].surface.mode = dContactBounce|dContactSoftERP|dContactSoftCFM;
contact[i].surface.soft_erp = 1.0; //1.0;
contact[i].surface.soft_cfm = 1e-10;
dJointID j = dJointCreateContact (m_domain->getWorld(), m_domain->getContactGroup(), contact+i);
dJointAttach(j, b1, b2);
}
}
}
开发者ID:saneku,项目名称:PODE2.0,代码行数:37,代码来源:ODEBaseScene.cpp
示例15: StaticEnvironment
void StaticEnvironment ( bool& do_colide, bool bo1, dContact& c, SGameMtl* material_1, SGameMtl* material_2 )
{
dJointID contact_joint = dJointCreateContact(0, ContactGroup, &c);
if(bo1)
{
((CPHActivationShape*)(retrieveGeomUserData(c.geom.g1)->callback_data))->DActiveIsland()->ConnectJoint(contact_joint);
dJointAttach (contact_joint, dGeomGetBody(c.geom.g1), 0);
}
else
{
((CPHActivationShape*)(retrieveGeomUserData(c.geom.g2)->callback_data))->DActiveIsland()->ConnectJoint(contact_joint);
dJointAttach (contact_joint, 0, dGeomGetBody(c.geom.g2));
}
do_colide=false;
}
开发者ID:AntonioModer,项目名称:xray-16,代码行数:16,代码来源:PHActivationShape.cpp
示例16: dCollide
void WorldPhysics::handleCollisionBetween(dGeomID o0, dGeomID o1) {
int i,n;
// only collide things with the ground
//int g1 = (o1 == ground || o1 == ground_box);
//int g2 = (o2 == ground || o2 == ground_box);
//if (!(g1 ^ g2)) return;
// for(int i=0;i<4;i++) {
// if (((o0==bulldozer->geom) && (o1==wheels[i]->geom)) ||
// ((o0==wheels[i]->geom) && (o1==bulldozer->geom))) return;
// }
const int N = 100;
dContact contact[N];
n = dCollide (o0,o1,N,&contact[0].geom,sizeof(dContact));
if (n > 0) {
for (i=0; i<n; i++) {
contact[i].surface.mode = dContactSlip1 | dContactSlip2 |
dContactSoftERP | dContactSoftCFM | dContactApprox1;
contact[i].surface.mu = 1.7;
contact[i].surface.slip1 = 0.1;
contact[i].surface.slip2 = 0.1;
contact[i].surface.soft_erp = 0.5;
contact[i].surface.soft_cfm = 0.3;
dJointID c = dJointCreateContact (world,contactgroup,&contact[i]);
dJointAttach (c,
dGeomGetBody(contact[i].geom.g1),
dGeomGetBody(contact[i].geom.g2));
}
}
}
开发者ID:itroot,项目名称:university-tasks,代码行数:34,代码来源:WorldPhysics.cpp
示例17: inspectJoints
static void inspectJoints(void)
{
const dReal forcelimit = 2000.0;
int i;
for (i=0; i<SEGMCNT-1; i++)
{
if (dJointGetBody(hinges[i], 0))
{
// This joint has not snapped already... inspect it.
dReal l0 = dCalcVectorLength3(jfeedbacks[i].f1);
dReal l1 = dCalcVectorLength3(jfeedbacks[i].f2);
colours[i+0] = 0.95*colours[i+0] + 0.05 * l0/forcelimit;
colours[i+1] = 0.95*colours[i+1] + 0.05 * l1/forcelimit;
if (l0 > forcelimit || l1 > forcelimit)
stress[i]++;
else
stress[i]=0;
if (stress[i]>4)
{
// Low-pass filter the noisy feedback data.
// Only after 4 consecutive timesteps with excessive load, snap.
fprintf(stderr,"SNAP! (that was the sound of joint %d breaking)\n", i);
dJointAttach (hinges[i], 0, 0);
}
}
}
}
开发者ID:BenitoJedai,项目名称:jslibs,代码行数:27,代码来源:demo_feedback.cpp
示例18: printf
ODEConstraint::ODEConstraint(OscConstraint *c, dJointID odeJoint,
dWorldID odeWorld, dSpaceID odeSpace,
OscObject *object1, OscObject *object2)
{
m_constraint = c;
m_odeWorld = odeWorld;
m_odeSpace = odeSpace;
m_odeBody1 = 0;
m_odeBody2 = 0;
m_odeJoint = odeJoint;
ODEObject *o = NULL;
if (object1)
o = dynamic_cast<ODEObject*>(object1->special());
if (o)
m_odeBody1 = o->m_odeBody;
if (object2) {
o = NULL;
if (object2)
o = dynamic_cast<ODEObject*>(object2->special());
if (o)
m_odeBody2 = o->m_odeBody;
}
else {
printf("constraint created with bodies %#x and world.\n", m_odeBody1);
}
if (m_odeJoint)
dJointAttach(m_odeJoint, m_odeBody1, m_odeBody2);
printf("constraint created with bodies %#x and %#x.\n", m_odeBody1, m_odeBody2);
}
开发者ID:funkmeisterb,项目名称:dimple,代码行数:34,代码来源:PhysicsSim.cpp
示例19: nearCallback
static void nearCallback (void *data, dGeomID o1, dGeomID o2)
{
int i,n;
dBodyID b1 = dGeomGetBody(o1);
dBodyID b2 = dGeomGetBody(o2);
if (b1 && b2 && dAreConnected(b1, b2))
return;
const int N = 4;
dContact contact[N];
n = dCollide (o1,o2,N,&contact[0].geom,sizeof(dContact));
if (n > 0) {
for (i=0; i<n; i++) {
contact[i].surface.mode = dContactSlip1 | dContactSlip2 | dContactSoftERP | dContactSoftCFM | dContactApprox1;
if (dGeomGetClass(o1) == dSphereClass || dGeomGetClass(o2) == dSphereClass)
contact[i].surface.mu = 20;
else
contact[i].surface.mu = 0.5;
contact[i].surface.slip1 = 0.0;
contact[i].surface.slip2 = 0.0;
contact[i].surface.soft_erp = 0.8;
contact[i].surface.soft_cfm = 0.01;
dJointID c = dJointCreateContact (world,contactgroup,contact+i);
dJointAttach (c,dGeomGetBody(o1),dGeomGetBody(o2));
}
}
}
开发者ID:CentreForBioRobotics,项目名称:lpzrobots,代码行数:28,代码来源:demo_crash.cpp
示例20: dJointCreateHinge
dJointID HingeJoint::createJoint(dBodyID b1, dBodyID b2)
{
dJointID j = dJointCreateHinge(m_world, 0);
dJointAttach(j, b1, b2);
return j;
}
开发者ID:SIGVerse,项目名称:SIGServer,代码行数:7,代码来源:Joint.cpp
注:本文中的dJointAttach函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论