Array王锐大神力作:osg与PhysX结合系列内容——第1节 PhysX核心功能及基本程序结构介绍
〖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核心功能及基本程序结构介绍相关推荐
- Array王锐大神力作:osg与PhysX结合系列内容——第5节 角色动画效果(上)
[Array王锐大神力作]osg与PhysX结合系列内容--角色动画效果(上) 物理引擎先放一边 动画库ozz-animation 动画资源管理 载入和预处理动画 合并到OSG显示 物理引擎先放一边 ...
- Array王锐大神力作:osg与PhysX结合系列内容——第2节 刚体物理表现
[Array王锐大神力作]osg与PhysX结合系列内容--刚体物理表现 本节内容 建立物理世界 建立刚体对象 定义通用碰撞体形状 静态和动态刚体 定义刚体的动力学属性 碰撞回调 构建测试场景并运行 ...
- Array王锐大神力作:osg与PhysX结合系列内容——第3节 地形碰撞体
[Array王锐大神力作]osg与PhysX结合系列内容--地形碰撞体 "烘焙"物理碰撞体 HeightField与TriangleMesh 物理材质的概念与使用 直接读取高度图数 ...
- Array王锐大神力作:osg与PhysX结合系列内容——第0节 前言篇
[Array王锐大神力作]osg与PhysX结合系列内容--前言篇 导语 系列内容预告 导语 OpenSceneGraph(OSG)是一个历史悠久的三维渲染引擎,至今仍然有广泛的用户群体,以及大量成功 ...
- Array王锐大神力作:osg与PhysX结合系列内容——第4节 角色运动控制
[Array王锐大神力作]osg与PhysX结合系列内容--角色运动控制 运动学角色体(CCT) 角色的创建和参数设置 角色的交互控制 上下楼梯 设置空气墙 构建测试场景并运行 运动学角色体(CCT) ...
- Array王锐力作:osg与PhysX结合系列内容——第5节 角色动画效果(下)
[Array王锐大神力作]osg与PhysX结合系列内容--角色动画效果(下) 角色动作的过渡切换 角色动画高级技巧 构建测试场景并运行 数据驱动的角色运动 角色动作的过渡切换 我们在研究下一步的高级 ...
- 请大神指导EGS5中DOSRZnrc的相关内容
本人现在做蒙卡模拟方面的课题,其中涉及到EGS5中DOSRZnrc code模拟CT数据,我想了解一下这是代码的内容以及相关介绍,求相关大神帮忙解答
- 【PC工具】大神开源项目-配色调色工具Colorpicker颜色选择器
微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 今天看到一个不错的开源的大神的作品,Colorpicker颜色选择器,和大家分享一下. ...
- 【任务脚本】双十一将至,任务脚本预热,OrangeJs基于autojs全自动程序,向大神致敬...
公众号关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 一年一度的双十一又快到了,还有一个月,记得去年是11月初开始做任务的. ...
最新文章
- SAP PM 入门系列6 - PM常用表
- antd tree 动态添加_一文了解Matlab如何制作动态图像
- 设计过程中常见的 10 个小问题
- 大数据笔记-0907
- 3dsmax导出html,3dsmax导出gltf格式插件
- es6 Map,Set 和 WeakMap,WeakSet
- 电机 matlab 仿真 实验总结,哈工大 电机学 MATLAB 仿真 实验报告.docx
- python爬虫案例典型:爬取大学排名(亲测有效)
- linux强制格式化命令选项,linux格式化命令如何使用
- 零基础学FPGA(二):FPGA生产厂家及产品(呕心沥血,小白如何选择板卡)
- [学科总结] 《线性系统理论》
- html盒子两个背景图片,css怎么实现两张图片叠加在一起,css添加盒子背景图片
- c语言log库,Log4g
- 3.4 随机变量的相互独立性
- 04.Nginx代理(学习)
- PyTorch中的叶节点、中间节点、梯度计算等知识点总结
- 合泰 HT66F2390 uart0与uart1 串口代码相互通信
- ADB和Fastboot最新版的谷歌官方下载链接
- 最新的国内手机号码匹配,包括14年新增的17开头的号段
- javascript 日期日历控件
热门文章
- MIT教授:AI颠覆商业的唯一阻碍是你不会用它
- 因果推理(四):因果模型
- 泡泡堂段王一进去服务器不稳定,为什么泡泡堂游戏进入不了,只是点了选择了三区,然后就什么也没有了,过半天出来一个服务器连接中断...
- Linux用户相关操作
- C#中var关键字 //作者:courageously
- 技术总监“阿朱”是何许人也
- win7系统重装之u盘装系统教程,u盘安装win7系统
- ForexClub:卡塔尔豪掷千亿举办世界杯,钱哪儿来的?
- 从毕业生到“造路人”:贵州城市职业学院大专毕业生的前行故事
- 2020阿里云云栖大会概览