Chinaunix首页 | 论坛 | 博客
  • 博客访问: 397265
  • 博文数量: 466
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-16 13:59
文章分类

全部博文(466)

文章存档

2015年(466)

我的朋友

分类: C/C++

2015-03-16 14:25:31

原文地址:Chipmnuk 学习笔记 作者:linux_wuliqiang




torque 扭矩
Velocity 速度
force 力
Mass 质量
rotational 转动
Segment 线段
radians 弧度
inertia 惯性



创建圆形: cpCircleShapeNew(cpBody * body, cpFloat radius, cpVect offset)
创建线段: cpSegmentShapeNew(cpBody * body, cpVect a, cpVect b, cpFloat radius)
创建多边形: cpPolyShapeNew(cpBody * body, int numVerts, cpVect * verts, cpVect offset) // 顶点记得按逆时针方向排序



旋转轴链接: cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot) 链接两个 body ,两个body 可以围绕 pivot 这个轴旋转


shape->e : 弹力系数
shape->u : 摩擦系数
shape->collision_type : 设置碰撞的类型, 也可当作一个标志位, 来区分不同物体的形状。


body->p, cpVect: Position of the body. 身体当前的位置 --- 身体重心的位置
body->v, cpVect: Velocity of the body. 身体当前的速度
body->m, cpFloat: Mass of the body. 身体的质量
body->w, cpFloat: Current rotational velocity of the body. 身体的当前旋转速度, w 大于 0 时, 逆时针方向转动, 小于 0 时, 顺时针方向转动
body->f, cpVect: Current force being applied to the body. 施加到当前身体上的一个 力。
body->f = cpv(10, -50); 施加到当前身体的外力可以理解如下:一个 x 正方向为 10 的力, 一个Y轴 负方向为 50 的力, 具体的模拟效果应该为 x,y 轴的合力。
body->a, cpFloat: Current rotation angle of the body in radians. 当前身体的旋转角度(以弧度为单位)



body->i – cpFloat: Moment of inertia (MoI or sometimes just moment) of the body. 惯性参数。
body->t – cpFloat: Current torque being applied to the body. 应用到当前身体上的 扭矩


body->v_limit – cpFloat: Maximum speed a body may have after updating it’s velocity. // 身体的最大速度

body->w_limit – cpFloat: Maximum rotational speed a body may have after updating it’s velocity. // 身体的最大旋转速度


body->data,cpDataPointer: 一个数据指针,可以存储自己定制的一些数据。




其他说明信息:

1> joint: 用于连接刚体。有4种类型:
 pin joint: 相当于一根棍子(质量忽略)加两个大头针(锚点),两个刚体如果用pin joint连接,他们之间的距离不会改变,他们各自可绕锚点转动(如果有力矩的话)
 slide joint: 相当于把pin joint的棍子换成了滑槽。这个滑槽有最大和最小长度。
 pivot joint: 即一个旋转轴。两个刚体都绕这个轴旋转
 groove joint:相当于可滑动的pivot joint。将刚体2的旋转轴挂到处于刚体1的一段滑槽上。

2> 摆动的绳子, 可以看作一个个的小方块通过 joint 链接在一起的效果。

3> 物体碰撞相关函数

 int datea = 100;

 // 设置space 空间内碰撞的回调函数, space 空间内,

 // 只有 shape->collision_type =1, 和 shape->collision_type =2 发生碰撞的时候, 才会回调collFunc 函数。

 // 调用回调函数的时候, 传递了一个 date数据

 cpSpaceAddCollisionPairFunc(space, 1, 2, &collFunc, &data);


 // 碰撞回调函数

 // 如果函数返回 1, 系统会处理当前的碰撞, 并模拟碰撞之后的物理效果

 // 如果函数返回 0, 系统会忽略当前的碰撞, a,b 相互运动不会影响

 int collFunc(cpShape *a, cpShape *b, cpContact *contacts, int numContacts, cpFloat normal_coef, void *data)
 {
 int* pData = (int* ) data;
 printf(" Data = %d \n"); // 输出 100

 printf(" %d \n", a->collision_type ); // 输出 1

 printf(" %d \n", b->collision_type ); // 输出 2



 if(a->collision_type == 1 )
 {
 return 0; // 忽略 a,b 直接的碰撞效果, a,b 相互运动不会影响

 }
 else
 {
 return 1; // 处理 a, b 直接的碰撞效果

 }

 }


 


阅读(211) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~