摘要: 1、非模态对话框和父窗口共享当前线程的消息循环2、模态对话框新建一个新的消息循环,并由当前消息循环派发消息,而父窗口。模态对话框屏蔽了用户对它父窗口的操作,但是不是在消息循环里面屏蔽,所以给父窗口发送消息,父窗口还是可以接收得到。3、调用模态对话框的窗口处理函数会被阻塞,但是新的消息循环仍然可以调用父窗口的消息处理函数,所以,发送给父窗口的新消息仍然可以被及时处理。 阅读全文
posted @ 2011-03-02 16:02 oayx 阅读(4637) 评论(0) 推荐(0) 编辑
摘要: (工作较忙, 趁着圣诞节假期,希望能完成约束分析这部分)物理引擎中最重要的两大环节一个是碰撞检测,其次就是约束分析,约束分析用到了大量的刚体力学中的基础知识,以及PGS这样的数值计算算法,约束构成主要是根据约束类型来计算两个连接对象的jacobian矩阵,配合shape计算转动惯量,来更新相互连接的对象的位置、速度, 来模拟连接对象受力的效果。约束包含基本的6种,可以衍生出更多,每一种都有各自的jacobian矩阵,这块可以参考文献《Stable, Robust, and Versatile Multibody Dynamics Animation》这里不做赘述。在基本的计算之外还要加入纠错, 阅读全文
posted @ 2011-03-02 09:18 oayx 阅读(1857) 评论(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 阅读(1368) 评论(0) 推荐(0) 编辑
摘要: 接着上次关于Dbvt得分析,不过漏掉了一个比较重要的函数function btDbvt:: collideTTpersistentStack, btDbvt::collideTT * btDbvt:: collideTTpersistentStack. 负责进行两个dbvt子树的比较,找出两个子树中重叠的节点对,基于一个全局栈(一个成员变量实例) * btDbvt::collideTT. 负责进行两个dbvt子树的比较,找出两个子树中重叠的节点对,但是基于的是一个局部栈(函数调用结束则释放)。 * btDbvt::collideTV. 负责在一个树中搜索和对应包围体重叠的节点。btDbvt:: 阅读全文
posted @ 2011-03-02 09:16 oayx 阅读(669) 评论(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 阅读(662) 评论(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 阅读(950) 评论(0) 推荐(0) 编辑
摘要: 开始阅读前可以先浏览一下之前框架分析在物理模拟的场景中, 一个节点首先应该具备2种属性物理属性 包含 质量,速度,惯性,加速度,角速度,约束,摩擦系数 等 几何属性 形状, 包围体层次,碰撞检测类型掩码。world 变换。 物理属性大部分都在collosionObject 和rigidObjec 这样的类之中。几何属性则又一次被细分为包围体层次和形状,碰撞检测类型掩码。为了进一步介绍Dbvt的核心函数 btDbvt::collideTV必须首先引入btDbvtProxy。btDbvtProxy 继承自 btBroadphaseProxy。view plaincopy to clipboardp 阅读全文
posted @ 2011-03-02 09:15 oayx 阅读(1477) 评论(0) 推荐(0) 编辑
摘要: 原创帖子, 转载请注明出处,作者信息. 这个是自己分析bullet的代码过程中的笔记,比较简陋, 希望抛砖引玉, 欢迎板砖作者: 马良 (http://www.iphonephysics.com/ ) (此blog需Over GW)//应朋友要求在最后附上书目 理论准备:本科的数学分析,理论力学,线性代数。 尤其是理论力学中的朗格朗日动力学部分 最好能回忆起来。 碰撞检测上面列的两本书的内容就足够了,如果进一步挖掘需要看 计算几何方面的书 补一个架构图 引自[1]的12页,其中的STC即为上次分析中的islandmanager 碰撞响应的分析 约束分类:可积约束,不可积约束 ,摩擦力(见[1] 阅读全文
posted @ 2011-03-02 09:14 oayx 阅读(1309) 评论(0) 推荐(0) 编辑