本文整理汇总了C++中Body::extraJoint方法的典型用法代码示例。如果您正苦于以下问题:C++ Body::extraJoint方法的具体用法?C++ Body::extraJoint怎么用?C++ Body::extraJoint使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Body
的用法示例。
在下文中一共展示了Body::extraJoint方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setExtraJoints
void ODEBody::setExtraJoints(bool flipYZ)
{
Body* body = this->body();
const int n = body->numExtraJoints();
for(int j=0; j < n; ++j){
Body::ExtraJoint& extraJoint = body->extraJoint(j);
ODELinkPtr odeLinkPair[2];
for(int i=0; i < 2; ++i){
ODELinkPtr odeLink;
Link* link = extraJoint.link[i];
if(link->index() < odeLinks.size()){
odeLink = odeLinks[link->index()];
if(odeLink->link == link){
odeLinkPair[i] = odeLink;
}
}
if(!odeLink){
break;
}
}
if(odeLinkPair[1]){
dJointID jointID = 0;
Link* link = odeLinkPair[0]->link;
Vector3 p = link->attitude() * extraJoint.point[0] + link->p();
Vector3 a = link->attitude() * extraJoint.axis;
if(flipYZ){
makeInternal(p);
makeInternal(a);
}
// \todo do the destroy management for these joints
if(extraJoint.type == Body::EJ_PISTON){
jointID = dJointCreatePiston(worldID, 0);
dJointAttach(jointID, odeLinkPair[0]->bodyID, odeLinkPair[1]->bodyID);
dJointSetPistonAnchor(jointID, p.x(), p.y(), p.z());
dJointSetPistonAxis(jointID, a.x(), a.y(), a.z());
} else if(extraJoint.type == Body::EJ_BALL){
jointID = dJointCreateBall(worldID, 0);
dJointAttach(jointID, odeLinkPair[0]->bodyID, odeLinkPair[1]->bodyID);
dJointSetBallAnchor(jointID, p.x(), p.y(), p.z());
}
}
}
}