ODE(open dynamics engine) (1)
目录
- 一、数据类型
- 1. b a s i c d a t a t y p e s \ basic \ data \ types basic data types
- 2. O b j e c t s a n d I D s \ Objects \ and \ IDs Objects and IDs
- 3. A r g u m e n t c o n v e n t i o n s Argument \ conventions Argument conventions
- 二、基本流程
- 二、碰撞检测
- 1. c o l l i s i o n t e s t s s u p p o r t e d collision \ tests \ supported collision tests supported
- 2. c o n t a c t p o i n t s contact \ points contact points
- 3. G e o m s Geoms Geoms
- 4. S p a c e s Spaces Spaces
- 5. C o l l i s i o n d e t e c t i o n Collision \ detection Collision detection
一、数据类型
1. b a s i c d a t a t y p e s \ basic \ data \ types basic data types
d R e a l dReal dReal 代表浮点数,其他数据类型由 d R e a l dReal dReal 构成的数组实现。
2. O b j e c t s a n d I D s \ Objects \ and \ IDs Objects and IDs
d S p a c e dSpace dSpace与 d G e o m dGeom dGeom在碰撞检测中会遇到。
3. A r g u m e n t c o n v e n t i o n s Argument \ conventions Argument conventions
凡是涉及到”set“的函数,传入的参数是独立的;凡是涉及到”get“的函数,返回的是 d R e a l dReal dReal数组的指针;坐标默认是世界坐标系下的坐标。
二、基本流程
1.创建世界:
dWorldID dWorldCreate();
2.创建 s p a c e space space:
三种不同的 s p a c e space space,每一种采用不同的数据结构存储几何体,根据不同的算法作碰撞检测。
dSpaceID dSimpleSpaceCreate (dSpaceID space);
dSpaceID dHashSpaceCreate (dSpaceID space);
dSpaceID dQuadTreeSpaceCreate (dSpaceID space, dVector3 Center, dVector3 Extents, int Depth);
3.创建物体:
dBodyID dBodyCreate (dWorldID);
4.设置物体位姿(位置与姿态)与速度(线速度与角速度):
void dBodySetPosition (dBodyID, dReal x, dReal y, dReal z);
void dBodySetRotation (dBodyID, const dMatrix3 R);
void dBodySetQuaternion (dBodyID, const dQuaternion q);
void dBodySetLinearVel (dBodyID, dReal x, dReal y, dReal z);
void dBodySetAngularVel (dBodyID, dReal x, dReal y, dReal z);
const dReal * dBodyGetPosition (dBodyID);
const dReal * dBodyGetRotation (dBodyID);
const dReal * dBodyGetQuaternion (dBodyID);
const dReal * dBodyGetLinearVel (dBodyID);
const dReal * dBodyGetAngularVel (dBodyID);"set"传入独立参数,"get"获得数组指针
5.添加质量和力:
//Mass用一个结构体来描述,包含质量,质心,惯量矩阵
typedef struct dMass {dReal mass; // total mass of the rigid bodydVector3 c; // center of gravity position in body frame (x,y,z)dMatrix3 I; // 3x3 inertia tensor in body frame, about POR
} dMass;
//例:Box对应的Mass,此外还有cylinder等
//参数:Mass地址,密度,长,宽,高
void dMassSetBox (dMass *, dReal density, dReal lx, dReal ly, dReal lz);
void dBodySetMass (dBodyID, const dMass *mass);
/*添加力*/
void dBodyAddForce (dBodyID, dReal fx, dReal fy, dReal fz);
6.创建几何体:
dGeomID dCreateBox (dSpaceID space, dReal lx, dReal ly, dReal lz);
7.模拟:
//参数:窗口宽度与高度,模拟时调的函数
void dsSimulationLoop(int argc, char **argv,int window_width, int window_height, dsFunctions *fn)
二、碰撞检测
1. c o l l i s i o n t e s t s s u p p o r t e d collision \ tests \ supported collision tests supported
2. c o n t a c t p o i n t s contact \ points contact points
碰撞点信息由一个结构体描述:
struct dContactGeom {dVector3 pos; // contact positiondVector3 normal; // normal vectordReal depth; // penetration depthdGeomID g1,g2; // the colliding geoms
};
3. G e o m s Geoms Geoms
在碰撞系统中,几何体是基本对象,一个几何体可以代表一个刚体形状,也可以代表一群,即 s p a c e space space。几何体之间的碰撞产生碰撞信息, s p a c e space space可以产生内部几何体的碰撞点。
几何体分为 p l a c e b l e placeble placeble与 n o n − p a l c e b l e non-palceble non−palceble,前者和刚体一样,有位姿信息,后者没有。 p l a c e b l e g e o m s placeble \ geoms placeble geoms和刚体对象联系起来做刚体模拟, g e o m s geoms geoms可以设置形状,大小,位姿, o b j e c t object object可以设置动力学属性,如速度,质量,二者结合起来构成模拟的对象。 d G e o m S e t B o d y dGeomSetBody dGeomSetBody函数将 b o d y body body与 g e o m geom geom结合起来,修改 b o d y body body的位姿会改变与之对应的 g e o m geom geom的位姿,同样地,修改 g e o m geom geom的位姿会改变 b o d y body body的位姿。
void dGeomSetBody (dGeomID, dBodyID);
4. S p a c e s Spaces Spaces
s p a c e space space在碰撞系统中类似于刚体中的 w o r l d world world,可以在 s p a c e space space内创建几何体,这样在做碰撞检测时,调用 d S p c e C o l l i d e dSpceCollide dSpceCollide函数可以快速识别到可能会碰撞的几何体,筛选出的这些几何体再传入 d C o l l i d e dCollide dCollide函数( c a l l b a c k callback callback函数调用 d C o l l i d e dCollide dCollide函数),相较于将所有几何体都传入 d C o l l i d e dCollide dCollide函数,该方法显然更快。
5. C o l l i s i o n d e t e c t i o n Collision \ detection Collision detection
1. d C o l l i d e dCollide dCollide函数生成两个相交几何体的碰撞点。
int dCollide (dGeomID o1, dGeomID o2, int flags, dContactGeom *contact, int skip);
∗ c o n t a c t * contact ∗contact是指向碰撞点结构体数组的指针,如果两个几何体碰撞,该函数返回碰撞点数量,反之返回0。
2. d S p a c e C o l l i d e dSpaceCollide dSpaceCollide函数检测一个 s p a c e space space内可能会相交的几何体对,之后传入 c a l l b a c k callback callback函数。 d S p a c e C o l l i d e dSpaceCollide dSpaceCollide函数不直接产生碰撞点,用户可以自定义 c a l l b a c k callback callback函数。
void dSpaceCollide (dSpaceID space, void *data, dNearCallback *callback);
typedef void dNearCallback (void *data, dGeomID o1, dGeomID o2);
参数 d a t a data data由 d S p a c e C o l l i d e dSpaceCollide dSpaceCollide直接传入 d N e a r C a l l b a c k dNearCallback dNearCallback,候选对中若出现其它的 s p a c e space space,只将其作为 d N e a r C a l l b a c k dNearCallback dNearCallback的一个参数传入,不会递归调用。
3. d S p a c e C o l l i d e 2 dSpaceCollide2 dSpaceCollide2函数检测两个 s p a c e space space内可能会相交的几何体,这一对几何体分别位于两个 s p a c e space space内。
void dSpaceCollide2 (dGeomID o1, dGeomID o2, void *data, dNearCallback *callback);
ODE(open dynamics engine) (1)相关推荐
- Open Dynamics Engine(ODE)简介
Russell Smith 的 Open Dynamics Engine(ODE)是一个开源的物理引擎,使用它可以仿真铰接式固形体运动.这样不管我们使用哪种图形库(可能使用 OpenGL),都可以对真 ...
- ODE(Open Dynamics Engine)学习笔记
https://tech.hqew.com/fangan_788777 此外,在ODE仿真环境中,可通过两种方式来模拟弹簧-阻尼系统: (1)通过设置ERP(Error Reduction Param ...
- C/C++ 框架,类库,资源集合
很棒的 C/C++ 框架,类库,资源集合. Awesome C/C++ Standard Libraries Frameworks Artificial Intelligence Asynchrono ...
- 【CG物理模拟系列】开篇:介绍(下)
上一篇介绍了CG物体模拟的定义,流程及种类,这一篇讲下物理模拟常用手法,物理模拟引擎,从物理模拟+3DCG程序的编写・到导出结果动画的处理顺序. 物理模拟常用手法 粒子法(Particle Metho ...
- 机器人系统常用仿真软件介绍和效果
机器人系统常用仿真软件介绍和效果 1 主要介绍以下七种仿真平台(侧重移动机器人仿真而非机械臂等工业机器人仿真): 1.1 USARSim-Unified System for Automation ...
- 机器人系统常用仿真软件介绍效果与评价指标
本文转载自博主zhangrelay:http://blog.csdn.net/ZhangRelay/article/details/42586491 转载过来,方便自己查看,感谢原博主. 机器人系统常 ...
- 成为游戏开发程序员,要学些什么
一.游戏程序开发的工作主要包括哪些方面 游戏开发中的程序开发主要由如下几个方面组成: 1.图形引擎 2.声音引擎 3.物理引擎 4.游戏引擎 5.人工智能或游戏逻辑 6.游戏GUI界面(菜 ...
- 如何成为一名游戏开发程序员
一.游戏程序开发的工作主要包括哪些方面 游戏开发中的程序开发主要由如下几个方面组成: 1.图形引擎 2.声音引擎 3.物理引擎 4.游戏引擎 5.人工智能或游戏逻辑 6.游戏GUI界面(菜单) 7.游 ...
- 游戏引擎与虚拟仿真系统
转自 http://blog.csdn.net/imedia_3d/article/details/5335086 1. 3D游戏引擎.仿真软件和图形引擎概述 目前3D图形技术大量应用于游戏 ...
最新文章
- DIY强大的虚拟化环境-技术可行性部分
- 你有哪些 Deep learning(RNN、CNN)调参的经验?
- mysql数据是怎么存储的_mysql数据是怎么存储的
- 解析:IEEE批准首个联邦机器学习框架标准
- springboot实现增量备份_SpringBoot canal数据同步解决方案
- c++ 输出string_来讲讲Java中String 类的知识点
- “无继承”情况下的对象构造
- Vue学习--MVVM模型
- 【笔记】Java如何判断是IDE启动还是jar启动
- 阿里矢量图标库项目添加合作者
- 【AcWing】语法基础课听课笔记
- Java高级篇-----jdk1.8新特性
- 使用git clone 遇见git did not exit cleanly (exit code 128)的个人解决方案
- java 去除引号_java如何用replaceAll去除字符串中的引号
- 2022年危险化学品经营单位安全管理人员考题及答案
- echarts——实现3D地图+3D柱状图 效果——粗糙代码记录——技能提升
- Arduino和Python螺旋桨角度数学模型
- 域名信息备案管理系统php,工信部备案系统域名变更已启用新域名
- PostgreSQL的GROUP BY问题
- 51单片机之点亮一个灯