随笔分类 -  bullet

摘要:(工作较忙, 趁着圣诞节假期,希望能完成约束分析这部分)物理引擎中最重要的两大环节一个是碰撞检测,其次就是约束分析,约束分析用到了大量的刚体力学中的基础知识,以及PGS这样的数值计算算法,约束构成主要是根据约束类型来计算两个连接对象的jacobian矩阵,配合shape计算转动惯量,来更新相互连接的对象的位置、速度, 来模拟连接对象受力的效果。约束包含基本的6种,可以衍生出更多,每一种都有各自的jacobian矩阵,这块可以参考文献《Stable, Robust, and Versatile Multibody Dynamics Animation》这里不做赘述。在基本的计算之外还要加入纠错, 阅读全文
posted @ 2011-03-02 09:18 oayx 阅读(1851) 评论(0) 推荐(0) 编辑
摘要:在bullet中一个非常普遍的应用是 针对两个物体发生碰撞时调用开发者自己提供的回调函数比如球体碰撞到另一个球体 发出声音下面是一个例子, 场景中有3种物体 球(动态),地板(静态),墙壁(静态)球碰到墙和地板发出的声音不同。所以需要设置这三种对象为不同类别,利用 collisionobj的userpointer来完成int objclass[3] ={0,1,2};boxBody->setUserPointer(&objclass[0]);ground->setUserPointer(&objclass[1]);wall->setUserPointer(&a 阅读全文
posted @ 2011-03-02 09:17 oayx 阅读(1366) 评论(0) 推荐(0) 编辑
摘要:接着上次关于Dbvt得分析,不过漏掉了一个比较重要的函数function btDbvt:: collideTTpersistentStack, btDbvt::collideTT * btDbvt:: collideTTpersistentStack. 负责进行两个dbvt子树的比较,找出两个子树中重叠的节点对,基于一个全局栈(一个成员变量实例) * btDbvt::collideTT. 负责进行两个dbvt子树的比较,找出两个子树中重叠的节点对,但是基于的是一个局部栈(函数调用结束则释放)。 * btDbvt::collideTV. 负责在一个树中搜索和对应包围体重叠的节点。btDbvt:: 阅读全文
posted @ 2011-03-02 09:16 oayx 阅读(668) 评论(0) 推荐(0) 编辑
摘要:光线与AABB 相交检测:这是一个非常经典的问题, <<real time collision detection>> 5.33章节有非常详尽的讨论。下面是光线的方程 t是可变参数, P是光线的起始点 RayFrom, d是光线的方向向量下面这个是平面的方程 向量n是平面的法向量,所以如果光线与任何一个平面相交,应该有如下等式对于AABB来说是六个平面, 每个面的法向量为(0,0,1)(0,1,0) ..... 总之三个坐标有两个是0,另外的一个是1或者-1AABB同时是3个平面槽的交集, 光线与AABB最多有2个相交点,一个是前景点,一个后景点,分别与两个平面相交。特 阅读全文
posted @ 2011-03-02 09:16 oayx 阅读(659) 评论(0) 推荐(0) 编辑
摘要:DBVT 在bullet 引擎中是很基础且重要的一个数据结构,本质上是一个可以动态更新的AABB树。在bullet的远距阶段是很高效的碰撞检测数据结构(比较OOB,K- DOP)。是组成dbvtbroadphase的重要成员。首先看看树中节点的定义view plaincopy to clipboardprint?struct btDbvtNode { btDbvtVolume volume; // point to the bounding volume btDbvtNode* parent; // point to parent node DBVT_INLINE bool isleaf() 阅读全文
posted @ 2011-03-02 09:15 oayx 阅读(943) 评论(0) 推荐(0) 编辑
摘要:开始阅读前可以先浏览一下之前框架分析在物理模拟的场景中, 一个节点首先应该具备2种属性物理属性 包含 质量,速度,惯性,加速度,角速度,约束,摩擦系数 等 几何属性 形状, 包围体层次,碰撞检测类型掩码。world 变换。 物理属性大部分都在collosionObject 和rigidObjec 这样的类之中。几何属性则又一次被细分为包围体层次和形状,碰撞检测类型掩码。为了进一步介绍Dbvt的核心函数 btDbvt::collideTV必须首先引入btDbvtProxy。btDbvtProxy 继承自 btBroadphaseProxy。view plaincopy to clipboardp 阅读全文
posted @ 2011-03-02 09:15 oayx 阅读(1474) 评论(0) 推荐(0) 编辑
摘要:原创帖子, 转载请注明出处,作者信息. 这个是自己分析bullet的代码过程中的笔记,比较简陋, 希望抛砖引玉, 欢迎板砖作者: 马良 (http://www.iphonephysics.com/ ) (此blog需Over GW)//应朋友要求在最后附上书目 理论准备:本科的数学分析,理论力学,线性代数。 尤其是理论力学中的朗格朗日动力学部分 最好能回忆起来。 碰撞检测上面列的两本书的内容就足够了,如果进一步挖掘需要看 计算几何方面的书 补一个架构图 引自[1]的12页,其中的STC即为上次分析中的islandmanager 碰撞响应的分析 约束分类:可积约束,不可积约束 ,摩擦力(见[1] 阅读全文
posted @ 2011-03-02 09:14 oayx 阅读(1300) 评论(0) 推荐(0) 编辑
摘要:在制作我的demo的过程中出现这样一个问题,人物跳起来,我如何判断他是什么时候落地的,还有落地的问题,ogrebullet中我没有找到相关的处理,我这里只能使用bullet的碰撞回调函数了,下面是我的做法,如果有哪位有更好的方法,请告诉我,我在这里谢谢了。//OgreBulletDynamics::DynamicsWorld *mWorld;// myInternalTickCallback是一个回调函数typedef void (*btInternalTickCallback)(btDynamicsWorld *world, btScalar timeStep);mWorld->get 阅读全文
posted @ 2011-03-01 10:23 oayx 阅读(1371) 评论(0) 推荐(1) 编辑
摘要:对于角色的控制一个问题就是,是否使用角色的模型?如何控制人物的行走,旋转等?ogrebullet没有角色控制相关的使用,那么只有从bullet那里了,进行控制了在bullet物理引擎的介绍中有关于角色控制的一些资料,在bullet源代码中应该可以找到一个pdf文件。里面介绍的bullet的一些使用,那么第9节 Action:Vehicles & Character Controller 里面就介绍了一些角色控制相关的:角色或NPC可以使用一个囊状、球体或者其他相撞来代替,不想让他自动旋转,可以把angular factor 设置为0,等等,自己去看吧,下面是我自己使用ogrebulle 阅读全文
posted @ 2011-03-01 10:23 oayx 阅读(1571) 评论(0) 推荐(0) 编辑
摘要:原创帖子, 转载请注明出处,作者信息. 这个是自己分析bullet的代码过程中的笔记,比较简陋, 希望抛砖引玉, 欢迎板砖作者: 马良 (http://www.iphonephysics.com/ ) (此blog需Over GW)前提假设 计算机图形学中的物理模拟实际上只是追求视觉近似,而并非精确的物理模拟 同时物理引擎从简化计算考虑, 不与渲染引擎共享对象数据采用独立的一套数据. 1 架构分... 阅读全文
posted @ 2010-09-24 15:09 oayx 阅读(1199) 评论(0) 推荐(0) 编辑