〖Array王锐大神力作〗osg与PhysX结合系列内容——PhysX核心功能及基本程序结构介绍

  • 本节内容
    • 下载和编译PhysX
    • PhysX的核心功能
    • PhysX的基本程序结构
    • PhysX与OSG结合的方式
    • 下载和编译osgPhysX

本节内容

下载和编译PhysX

介绍

  • PhysX比较经典的版本是3.3和3.4版本,其中3.4版本至今仍然保持一些细节和补丁的更新
  • PhysX 4已经于2018年左右发布,不过因为库结构差异较大,本文暂时并没有更新到4版本
  • PhysX 5已经在宣传过程中(包含了柔体,布料,流体等诸多新内容),未来如果继续保持开源,那么也许我们会直接跳到5版本的支持
  • PhysX 3/4的本体之外,还通过APEX库来实现布料,破碎等系统的支持,但是因为APEX库过于复杂晦涩,相关资料也很少,本文不会主动对它进行研究

步骤

  • 首先在NVIDIA Developer Center注册
  • 然后登录:https://github.com/NVIDIAGameWorks/PhysX/tree/3.4
  • 直接下载或者签出代码,然后进入:PhysX_3.4\Source\compiler\vc15win64(假设为VS15版本,64位系统;其它系统可以选择compileer下其它的子文件夹)
  • 打开PhysX.sln解决方案,选中右侧所有的工程,右键点击属性->C/C+±>代码生成->运行库,修改为/MD(release)或者/MDd(debug),这是为了和OSG依赖库对应

PhysX的核心功能

  • 刚体物理(Rigid Body Dynamics):
    实际固体的理想化模型,即在受力后其大小、形状和内部各点相对位置都保持不变的物体。在任何力的作用下,体积和形状都不发生改变的物体。这也是游戏物理引擎最常见的一类对象。
  • 角色控制器(Character
    Controllers):游戏中的角色互动操作,连续碰撞检测(CCD),运动和跳跃操作,Kinematic运动学控制等。
  • 场景查询(Scene
    Query):对物理场景进行交集测试并反馈单个或者多个查询结果,支持射线求交(raycast),形状扫掠(sweep)和覆盖区域(overlap)三种求交测试的方式。
  • 车辆动力学(Vehicle
    Dynamics):四轮和六轮车辆的仿真模拟,包括底盘和轮子的物理运动控制,手动挡/自动挡控制,悬挂系统模拟等。
  • 关节系统(Joints):两个物理刚体之间的连接和相互运动关系,典型的关节系统例如门闩,铰链,或者人体关节等。

自学参考资料
https://docs.nvidia.com/gameworks/content/gameworkslibrary/physx/guide/Manual/Index.html

PhysX的基本程序结构

初始化过程:

  • 创建PxFoundation对象:该对象用于构建PhysX中的基本元素,分配和管理内存空间等。
  • 构建PxPhysics对象:该对象即PhysX的核心管理器,用于创建各种物理组件,以及关联PVD(可视化调试工具)等。
  • 构建PxCooking对象:用于自动“烘焙”生成几何体对应的物理碰撞体(例如凸包/hull),并管理相关数据。复杂几何形体的物理碰撞体通常是简单的,以便保证物理运算的效率。
  • 加载扩展库对象:PhysX中采用模块化的方式加载一些非系统核心的组件,例如粒子,高度图,布料等,加载扩展库对象可以在运行时将这些模块加载到系统中使用。

场景核心元素:

  • PxScene:物理场景的定义。
  • PxActor:角色节点基类,最常用的例如PxRigidActor,即刚体角色。
  • PxShape:角色的形状定义基类,即角色的物理碰撞体(立方体,球,胶囊体,凸包,三角网格等)。
  • PxMaterial:角色形状的物理材质,例如它的摩擦力等属性设置。

PxRigidActor的派生类:

  • PxRigidStatic:静态刚体
  • PxRigidBody:动力学刚体
  • PxRigidDynamic

主循环:

  • PxScene::simulate()仿真运行当前场景
  • PxScene::fetchResults()获取仿真运行的结果并记录到具体对象中

系统销毁过程:

  • PxPhysics::release()
  • PxFoundation::release()

PhysX与OSG结合的方式

紧耦合的方式:

  • 将物理角色类与OSG的Transform类合并,产生一个新的PhysicsNode类;
  • 根据它的子节点几何体信息构建对应的物理碰撞体,注册到物理场景中并仿真运行;
  • 仿真结果在当前帧的图形frame()中被关联到Transform,并改变物体的空间位置姿态。

松耦合的方式:

  • 物理角色类与OSG场景节点分别创建和分别管理;
  • 建立一个UpdateCallback,负责将物理角色的仿真结果传递给OSG节点;
  • PhysX对象负责物理仿真,OSG对象负责结果显示,两者泾渭分明。

考虑到非侵入式的场景结构设计,本文推荐松耦合的方式来实现两者的结合。对于OSG的场景结构不会有本质上的影响。最重要的是,把OSG当作一个可扩展也可调换的渲染的组件来使用,而不是一切以一个渲染引擎为核心去设计程序结构。

基本对象的转换:osg::Matrix <-> PxMat44 <-> PxTransform,osg::Vec3 <-> PxVec3

下载和编译osgPhysX

  • 工程地址:https://github.com/xarray/osgPhysX.git
  • 基本依赖:OpenSceneGraph 3.x,PhysX 3.4
  • 运行环境:Windows x86/x64。核心代码是可以移植到其它系统环境的(Win/Linux/OSX/Android),不过部分内部依赖库(例如OIS和DInput)可能需要重新编译或者替换。
  • PhysX编译后的结果自动保存在根目录PhysX_3.4的Include,Lib,Bin子目录中,通过CMake中的PHYSX_SDK_ROOT来设置根目录位置,通过PHYSX_LIBPATH_PREFIX来设置编译时所用的环境(本文用的是vc15win64)。
  • 编译和INSTALL完成后,将PhysX_3.4/Bin/vc15win64中的dll库拷贝到运行目录中,然后可以测试示例程序效果。

这个工程大约是7年前建立的,当时只是为了个人爱好,没有做任何的宣传推广;不过结构上是比较合理的,当时用的是PhysX 3.2/3.3版本,和3.4版本的变化不大。
这一次让它重现天日,并且制定了比较详细的后续开发和教程计划,也是希望能够进一步挖掘发现OSG和PhysX的价值,能够为有需要的朋友所用。

Array王锐大神力作:osg与PhysX结合系列内容——第1节 PhysX核心功能及基本程序结构介绍相关推荐

  1. Array王锐大神力作:osg与PhysX结合系列内容——第5节 角色动画效果(上)

    [Array王锐大神力作]osg与PhysX结合系列内容--角色动画效果(上) 物理引擎先放一边 动画库ozz-animation 动画资源管理 载入和预处理动画 合并到OSG显示 物理引擎先放一边 ...

  2. Array王锐大神力作:osg与PhysX结合系列内容——第2节 刚体物理表现

    [Array王锐大神力作]osg与PhysX结合系列内容--刚体物理表现 本节内容 建立物理世界 建立刚体对象 定义通用碰撞体形状 静态和动态刚体 定义刚体的动力学属性 碰撞回调 构建测试场景并运行 ...

  3. Array王锐大神力作:osg与PhysX结合系列内容——第3节 地形碰撞体

    [Array王锐大神力作]osg与PhysX结合系列内容--地形碰撞体 "烘焙"物理碰撞体 HeightField与TriangleMesh 物理材质的概念与使用 直接读取高度图数 ...

  4. Array王锐大神力作:osg与PhysX结合系列内容——第0节 前言篇

    [Array王锐大神力作]osg与PhysX结合系列内容--前言篇 导语 系列内容预告 导语 OpenSceneGraph(OSG)是一个历史悠久的三维渲染引擎,至今仍然有广泛的用户群体,以及大量成功 ...

  5. Array王锐大神力作:osg与PhysX结合系列内容——第4节 角色运动控制

    [Array王锐大神力作]osg与PhysX结合系列内容--角色运动控制 运动学角色体(CCT) 角色的创建和参数设置 角色的交互控制 上下楼梯 设置空气墙 构建测试场景并运行 运动学角色体(CCT) ...

  6. Array王锐力作:osg与PhysX结合系列内容——第5节 角色动画效果(下)

    [Array王锐大神力作]osg与PhysX结合系列内容--角色动画效果(下) 角色动作的过渡切换 角色动画高级技巧 构建测试场景并运行 数据驱动的角色运动 角色动作的过渡切换 我们在研究下一步的高级 ...

  7. 请大神指导EGS5中DOSRZnrc的相关内容

    本人现在做蒙卡模拟方面的课题,其中涉及到EGS5中DOSRZnrc code模拟CT数据,我想了解一下这是代码的内容以及相关介绍,求相关大神帮忙解答

  8. 【PC工具】大神开源项目-配色调色工具Colorpicker颜色选择器

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 今天看到一个不错的开源的大神的作品,Colorpicker颜色选择器,和大家分享一下. ...

  9. 【任务脚本】双十一将至,任务脚本预热,OrangeJs基于autojs全自动程序,向大神致敬...

       公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达.     一年一度的双十一又快到了,还有一个月,记得去年是11月初开始做任务的. ...

最新文章

  1. SAP PM 入门系列6 - PM常用表
  2. antd tree 动态添加_一文了解Matlab如何制作动态图像
  3. 设计过程中常见的 10 个小问题
  4. 大数据笔记-0907
  5. 3dsmax导出html,3dsmax导出gltf格式插件
  6. es6 Map,Set 和 WeakMap,WeakSet
  7. 电机 matlab 仿真 实验总结,哈工大 电机学 MATLAB 仿真 实验报告.docx
  8. python爬虫案例典型:爬取大学排名(亲测有效)
  9. linux强制格式化命令选项,linux格式化命令如何使用
  10. 零基础学FPGA(二):FPGA生产厂家及产品(呕心沥血,小白如何选择板卡)
  11. [学科总结] 《线性系统理论》
  12. html盒子两个背景图片,css怎么实现两张图片叠加在一起,css添加盒子背景图片
  13. c语言log库,Log4g
  14. 3.4 随机变量的相互独立性
  15. 04.Nginx代理(学习)
  16. PyTorch中的叶节点、中间节点、梯度计算等知识点总结
  17. 合泰 HT66F2390 uart0与uart1 串口代码相互通信
  18. ADB和Fastboot最新版的谷歌官方下载链接
  19. 最新的国内手机号码匹配,包括14年新增的17开头的号段
  20. javascript 日期日历控件

热门文章

  1. MIT教授:AI颠覆商业的唯一阻碍是你不会用它
  2. 因果推理(四):因果模型
  3. 泡泡堂段王一进去服务器不稳定,为什么泡泡堂游戏进入不了,只是点了选择了三区,然后就什么也没有了,过半天出来一个服务器连接中断...
  4. Linux用户相关操作
  5. C#中var关键字 //作者:courageously
  6. 技术总监“阿朱”是何许人也
  7. win7系统重装之u盘装系统教程,u盘安装win7系统
  8. ForexClub:卡塔尔豪掷千亿举办世界杯,钱哪儿来的?
  9. 从毕业生到“造路人”:贵州城市职业学院大专毕业生的前行故事
  10. 2020阿里云云栖大会概览