物理引擎系统-ode,物理引擎系统-ode

目录

物理引擎系统-ode

一.物理引擎系统-ode方法——dBodyVectorFromWorld

二、物理引擎系统-ode方法——dBodySetFiniteRotationMode  

三、物理引擎系统-ode方法——dBodySetFiniteRotationAxis  void dBodySetFiniteRotationAxis (dBodyID b, dReal x, dReal y, dReal z) {   dAASSERT (b);   b->finite_rot_axis[0] = x;   b->finite_rot_axis[1] = y;   b->finite_rot_axis[2] = z;   if (x != 0 || y != 0 || z != 0) {     dNormalize3 (b->finite_rot_axis);     b->flags |= dxBodyFlagFiniteRotationAxis;   }   else {     b->flags &= ~dxBodyFlagFiniteRotationAxis;   } }

四、物理引擎系统-ode方法——dBodyGetFiniteRotationAxis  void dBodyGetFiniteRotationAxis (dBodyID b, dVector3 result) {   dAASSERT (b);   result[0] = b->finite_rot_axis[0];   result[1] = b->finite_rot_axis[1];   result[2] = b->finite_rot_axis[2]; }

五、物理引擎系统-ode方法——dBodyGetJoint  dJointID dBodyGetJoint (dBodyID b, int index) {   dAASSERT (b);   int i=0;   for (dxJointNode *n=b->firstjoint; n; n=n->next, i++) {     if (i == index) return n->joint;   }   return 0; }

六、物理引擎系统-ode方法——dBodyEnable

七、 物理引擎系统-ode方法——dBodyDisable

物理引擎系统-ode

一.物理引擎系统-ode方法——dBodyVectorFromWorld 


void dBodyVectorFromWorld (dBodyID b, dReal px, dReal py, dReal pz,
               dVector3 result)
{
  dAASSERT (b);
  dVector3 p;
  p[0] = px;
  p[1] = py;
  p[2] = pz;
  p[3] = 0;
  dMULTIPLY1_331 (result,b->R,p);
}

二、物理引擎系统-ode方法——dBodySetFiniteRotationMode

void dBodySetFiniteRotationMode (dBodyID b, int mode)
{
  dAASSERT (b);
  b->flags &= ~(dxBodyFlagFiniteRotation | dxBodyFlagFiniteRotationAxis);
  if (mode) {
    b->flags |= dxBodyFlagFiniteRotation;
    if (b->finite_rot_axis[0] != 0 || b->finite_rot_axis[1] != 0 ||
    b->finite_rot_axis[2] != 0) {
      b->flags |= dxBodyFlagFiniteRotationAxis;
    }
  }
}

三、物理引擎系统-ode方法——dBodySetFiniteRotationAxis
void dBodySetFiniteRotationAxis (dBodyID b, dReal x, dReal y, dReal z)
{
  dAASSERT (b);
  b->finite_rot_axis[0] = x;
  b->finite_rot_axis[1] = y;
  b->finite_rot_axis[2] = z;
  if (x != 0 || y != 0 || z != 0) {
    dNormalize3 (b->finite_rot_axis);
    b->flags |= dxBodyFlagFiniteRotationAxis;
  }
  else {
    b->flags &= ~dxBodyFlagFiniteRotationAxis;
  }
}


int dBodyGetFiniteRotationMode (dBodyID b)
{
  dAASSERT (b);
  return ((b->flags & dxBodyFlagFiniteRotation) != 0);
}

四、物理引擎系统-ode方法——dBodyGetFiniteRotationAxis
void dBodyGetFiniteRotationAxis (dBodyID b, dVector3 result)
{
  dAASSERT (b);
  result[0] = b->finite_rot_axis[0];
  result[1] = b->finite_rot_axis[1];
  result[2] = b->finite_rot_axis[2];
}


int dBodyGetNumJoints (dBodyID b)
{
  dAASSERT (b);
  int count=0;
  for (dxJointNode *n=b->firstjoint; n; n=n->next, count++);
  return count;
}

五、物理引擎系统-ode方法——dBodyGetJoint
dJointID dBodyGetJoint (dBodyID b, int index)
{
  dAASSERT (b);
  int i=0;
  for (dxJointNode *n=b->firstjoint; n; n=n->next, i++) {
    if (i == index) return n->joint;
  }
  return 0;
}

六、物理引擎系统-ode方法——dBodyEnable 

void dBodyEnable (dBodyID b)
{
  dAASSERT (b);
  b->flags &= ~dxBodyDisabled;
}

  • 物理引擎系统-ode方法——dBodyDisable 


void dBodyDisable (dBodyID b)
{
  dAASSERT (b);
  b->flags |= dxBodyDisabled;
}


int dBodyIsEnabled (dBodyID b)
{
  dAASSERT (b);
  return ((b->flags & dxBodyDisabled) == 0);

猜你喜欢

转载自blog.csdn.net/N201871643/article/details/129820190