物理引擎系统-ode

物理引擎系统-ode

目录

物理引擎系统-ode

一、物理引擎系统-ode——ifdef

二、物理引擎系统-ode——initObject

三、物理引擎系统-ode——addObjectToList

四、物理引擎系统-ode——removeObjectFromList

五、物理引擎系统-ode——removeJointReferencesFromAttachedBodies

一、物理引擎系统-ode——ifdef 

#ifdef _MSC_VER

#pragma warning(disable:4291)  // for VC++, no complaints about "no matching operator delete found"

#endif

// this source file is mostly concerned with the data structures, not the

// numerics.

#include "objects.h"

#include <ode/ode.h>

#include "joint.h"

#include <ode/odemath.h>

#include <ode/matrix.h>

#include "step.h"

#include <ode/memory.h>

#include <ode/error.h>

// misc defines

#define ALLOCA dALLOCA16

//****************************************************************************

// utility

二、物理引擎系统-ode——initObject 

static inline void initObject (dObject *obj, dxWorld *w)

{

  obj->world = w;

  obj->next = 0;

  obj->tome = 0;

  obj->userdata = 0;

  obj->tag = 0;

}

// add an object `obj' to the list who's head pointer is pointed to by `first'.

三、物理引擎系统-ode——addObjectToList 

static inline void addObjectToList (dObject *obj, dObject **first)

{

  obj->next = *first;

  obj->tome = first;

  if (*first) (*first)->tome = &obj->next;

  (*first) = obj;

}

// remove the object from the linked list

四、物理引擎系统-ode——removeObjectFromList 

static inline void removeObjectFromList (dObject *obj)

{

  if (obj->next) obj->next->tome = obj->tome;

  *(obj->tome) = obj->next;

  // safeguard

  obj->next = 0;

  obj->tome = 0;

}

// remove the joint from neighbour lists of all connected bodies

五、物理引擎系统-ode——removeJointReferencesFromAttachedBodies 

static void removeJointReferencesFromAttachedBodies (dxJoint *j)

{

  for (int i=0; i<2; i++) {

    dxBody *body = j->node[i].body;

    if (body) {

      dxJointNode *n = body->firstjoint;

      dxJointNode *last = 0;

      while (n) {

    if (n->joint == j) {

      if (last) last->next = n->next;

      else body->firstjoint = n->next;

      break;

    }

    last = n;

    n = n->next;

      }

    }

  }

  j->node[0].body = 0;

  j->node[0].next = 0;

  j->node[1].body = 0;

  j->node[1].next = 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N201871643

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值