单立方体简单的动力学
来源:互联网 发布:现金贷系统源码 编辑:程序博客网 时间:2024/06/02 13:06
偶尔搜到
网游中的物理
作者:Glenn Fiedler
译者:trcj
原文:http://gafferongames.com/game-physics/networked-physics/
这按文章
好奇cubic 的物理仿真
代码在上文中已经给出。
本文只是对cubic物理仿真分析,和其事件处理
可能作者认为这个是demo所以代代码比较随意,很多全局变量,然后整个也没有pimpl只是.h 所组织起来
动力学场景:
是一个有六个面包围的房间里中的一个立方体的性质,支持输入参数,例如
enum input{ front back left right jump}
以上6个参数在内部物理状态的计算中均转换为相应的受力,
支持重力,damp, friction,
并且系统在damp 和 friction 的形象下,逐渐产生能量转换,
动能转换为内能耗散掉,所以停止外界输入,系统将趋于静止。
作者讲由于用了简单的积分计算,所以cube 看起来具有点弹性。
代码物理部分是用RK积分方法做处理,这种方法的优点是精度很高作者做到了O(5),其实本质上多做几次分割。
下面给出自己的理解对应的代码,
cubic 状态量
包含:
struct state{/// 主要的物理状态 Vector position; ///< cube 质心的世界坐标 (unit meters) Vector momentum; ///< cube 的动量 (unit kg*m/s) Quaternion orientation; ///< cube 的指向 使用一个单位四元数表示 Vector angularMomentum; ///< cube 角动量 // 计算时作为备份 Vector velocity; ///< velocity in meters per second (calculated from momentum). Quaternion spin; ///< cube 指向的变化率 Vector angularVelocity; ///< cube 的角速度 Matrix bodyToWorld; ///< cube 的局部到世界变换矩阵 Matrix worldToBody; ///< cube 的世界到局部变换矩阵 /// constant state float size; ///< cube 的边长 float mass; ///< cube 的质量 (unit kg) float inverseMass; ///< cube 的质量分之一,用来计算动量*inverseMass = velocity float inertiaTensor; ///< cube 的惯量张量,(这里因为是cube 所以简化为常量) float inverseInertiaTensor; ///< cube 的惯量张量分之一, (用来计算角速度)}
大步骤分三步
1) 计算time step 的 state
current state += Derivative * time step
相对比较简单
2) 计算在积分好的 state 的受力情况,也就是计算出新的受力
这不相对来讲比较麻烦,针对约束,要进行处理
a)作者简单的对 cube 于 房屋的六个面进行碰撞干涉检查
b)针对干涉进行特别处理:
- 添加重力gravity (常量)
- 添加阻尼,作者采用常量线性阻尼,所以在给出的demo中表现为阻尼过重。
- 计算torque torque改变 cube的角速度。(gravity 对torque没有贡献,因为其合作用在质心)
这步即使是作者采用了大量的近似,但是collision始终是物理仿真中的重点难点,因为不仅要测出
干涉点而且要对干涉进行处理,例如下面的简单的穿刺深度的处理。
- 首先计算出穿刺深度,即cube 顶点所在的位置与房间六个面的关系
- 相对速度关系
- 穿刺补偿受力(与穿刺深度成正比,方向为平面的法相)
- 扭矩torque 为 1)点摩擦受力与切向速度成正比 + 2)穿刺补偿力力矩 + 3)阻尼力矩???
d) 添加输入参数对系统受力的影响
将enum input 控制量转换为 受力。
3)对以上量运用RK方法积分计算出当前时刻的状态
- 单立方体简单的动力学
- openGl画一个简单的立方体
- 简单立方体纹理贴图
- ThreeJs:二、简单立方体
- opengl 绘制简单的带纹理贴图的立方体
- 一个简单的3D立方体C++源码
- 利用opengl es画立方体的简单流程
- unity3d的动力学汽车脚本
- 动脉阻塞的血流动力学
- 动力学,手把手的搞动画
- 机器人动力学方程的性质
- 向量处理机3___基本的单级互连网络_立方体Cube
- 旋转的立方体
- 优化的立方体绘制
- 翻转的立方体
- 旋转的四个立方体
- 求立方体的体积
- css3立方体的制作
- hql语句注意
- TMathparser
- 嵌入式Linux进程与信号(学习笔记)
- 笔试题
- SqlParameter的作用与用法
- 单立方体简单的动力学
- 小测几种python web server的性能
- 二,软件计划
- core_cm3.c和core_cm3.h,Core_cmFunc.h 和 Core_cmInstr.h的解说
- 使用Eclipse+WindowBuilder Pro开发GUI程序
- 素数求和
- lightroom使用小结十 数据库优化
- 深度解析Java内存的原型
- HDU 1014 Uniform Generator