PhysX 物理引擎研究(一)源码编译
前言
Unity 3D 中的物理引擎分为 2D 引擎和 3D 引擎两部分,其中 2D 引擎使用的 Erin Catto
写的是 Box2D,而 3D 引擎使用的的 NVIDIA 的 PhysX
,在 Unity Editor 中打开 Help
— About Unty
可以看到 "Physics powered by PhysX. (c) 2011 NVIDIA Corporation."
的字样。
Unity 历史 PhysX 版本
2005 年,Unity 1.0 就使用 PhysX 作为物理引擎
2010 年,Unity 3.0 版本将 PhysX 版本从 2.6 升级到 2.8
2014 年,Unity 5.0 版本将 PhysX 版本从 2.x 升级到 3.3
参考:UpgradeGuide5-Physics
Unity 2018.3 版本开始,Unity 将 PhysX 版本从 3.3.1 升级到 3.4.2
主要提升了稳定性和性能,且增加了多世界支持
参考:UpgradeGuide20183
Unity 2019.1 又加入了
Physics Debugger
工具用于可视化检查场景中几何图形的碰撞器,通过 Window > Analysis > Physics Debugger 打开
参考:Physics Debug Visualization
PhysX 简介
PhysX
是 NVIDIA 旗下的物理加速技术,利用 GPU 的处理能力来执行复杂的物理效果计算,利用 CUDA
技术,由显示核心加速运算。
目前支持的平台有:Windows 、Linux 、Android ARM 、mac OS 和 iOS 。
Github 源码:在 NVIDIAGameWorks 官方的 Github 仓库中有两份源码:
PhysX 2018 年 12 月份才开源的 4.0 版本,2019 年 3 月份更新至 4.1 版本(PhysX SDK 4.0 is available 和 Updated PhysX SDK 4.1 released)
PhysX-3.4 2016 年 10 月份开源的 3.4 版本(Pre-release version of PhysX SDK 3.4 is now available on GitHub)
目前主流的已集成了 PhysX
的游戏引擎有:Unity 3D 、Unreal Engine 3/4 等。(数据来源 phyxinfo )
更多 PhysX 的资讯可以查看官方网站 physxinfo.com 和 physx 总览
下载 PhysX 源码
从 Github 上下载 PhysX 4.0 源码:
$ git clone https://github.com/NVIDIAGameWorks/PhysX.git
工程有点大,大概 1.26G 左右,当然也可以直接下载 release 版本的压缩包:PhysX-4.0.0.zip ,然后解压
下载完毕,工程目录如下:
├─ PhysX
│ ├─ externals
│ ├─ kaplademo
│ └─ physx
│ └─ pxshared
下面是将 PhysX 引入我们自己的工程中的步骤,大致参考了 PhysXSetup.pdf 和
安装 DirectX SDK
假如只是想编译得到 SDK 的核心库,则不必安装此 SDK ,因为此 SDK 只在源码中的示例中被使用,即源码中提供的一个 demo 工程。符合要求的版本:Microsoft DirectX SDK 2010 年 6 月份及之后的版本,直接下载 DirectX SDK 9.29.1962 June 2010 ,然后双击进行安装即可,似乎只能装在 C 盘,其他盘装不了。
然而,我在安装 DirectX 的过程中出现了 Error Code:s1023
导致安装失败。
原因分析:
DirectX 安装过程中会顺便安装 Microsoft Visual C++ 2010 x86 Redistributable - 1010.0.30319
组件,而电脑中已经存在比此版本更高的 C++ Redistributable ,我在控制面板看了一下,由于我安装了 VS 2010 、VS 2015 和 VS 2017 ,并且都安装了 C++ 支持相关的 SDK,因此我电脑中 C++ Redistributable 的版本也有很多个:
看起来简直是噩梦,但其实跨大版本是不会冲突的。
解决方案:
因此只需要先卸载 Microsoft Visual C++ 2010 x86 Redistributable - 1010.0.40219
即可,包括 x64 和 x86。然后,再重新安装 DirectX 。
其实回退版本影响并不大,当然,假如还希望安装被卸载掉的 C++ 组件,可以从 Microsoft Visual C++ 2010 Service Pack 1 Redistributable Package MFC Security Update 下载安装。
更多 C++ Redistributable 版本可以在这里下载: Visual C++ Redistributable Packages and Related Registry Entries 。
SDK 编译源码
根据 官方文档 readme_windows 指出的编译要求:
CMake 3.12 或以上版本
Python 2.7.6 版本
这里我使用的是 CMake 3.13.0-r3 和 Python 2.7.9 ,具体编译步骤如下:
进入工程的 physx 目录,运行
generate_projects.bat
来生成 VS 解决方案,可以进入编译选择界面:E:\C++\libs\PhysX-4.0.0\physx>exit /b 0 Preset parameter required, available presets: (0) android <--- Android-19, armeabi-v7a with NEON PhysX SDK (1) vc12win32 <--- VC12 Win32 PhysX general settings (2) vc12win64 <--- VC12 Win64 PhysX general settings (3) vc14win32 <--- VC14 Win32 PhysX general settings (4) vc14win64 <--- VC14 Win64 PhysX general settings (5) vc15win32 <--- VC15 Win32 PhysX general settings (6) vc15win64 <--- VC15 Win64 PhysX general settings Enter preset number:
除了第一个 android 版本外,其余的都是 windows 平台下使用的,vc 版本对于 VS 编译器版本大致关系如下:
Visual Studio 2013 : vc12 Visual Studio 2015 : vc14 Visual Studio 2017 : vc15
这里我选择 6 ,则生成的工程用 VS 2017 打开,编译生成用 64 位的库。
工程生成成功后,在
physx/compiler
目录下会多出一个vc15win64
的目录:假如当前已安装了 VS2017 ,直接双击打开
PhysXSDK.sln
文件 。编译全部:
然后依次选择菜单:
调试
>开始执行
结果出现 3 个错误:
58>------ 已启动生成: 项目: ALL_BUILD, 配置: debug x64 ------ 58>Building Custom Rule E:/C++/libs/PhysX-4.0.0/physx/compiler/public/CMakeLists.txt 58>CMake does not need to re-run because E:/C++/libs/PhysX-4.0.0/physx/compiler/vc15win64/CMakeFiles/generate.stamp is up-to-date. ========== 生成: 成功 55 个,失败 3 个,最新 0 个,跳过 0 个 ==========
查看输出日志,3 个错误分别是:
29>已完成生成项目“SamplePlatform.vcxproj”的操作 - 失败。 ... 30>已完成生成项目“SampleRenderer.vcxproj”的操作 - 失败。 ... 44>已完成生成项目“Samples.vcxproj”的操作 - 失败。 ...
而导致失败的原因是:
: fatal error C1083: 无法打开包括文件: “d3dx9.h”: No such file or directory
这是因为源码中的 demo 依赖 DirectX SDK ,解决步骤如下:
在
解决方案资源管理器
中分别选择报错的三个工程:SamplePlatform
、SampleRenderer
和Samples
,右键
>属性
:设置 include 目录
C/C++
>常规
>附加头文件
,进入编辑状态然后添加 DirectX SDK 安装目录中的 include 目录:C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include
设置 lib 目录
库管理器
>常规
>附加库目录
(Samples
不是静态链接库,因此是链接
>常规
>附加库目录
),进入编辑状态,添加目录 DirectX SDK 安装目录中的 Lib目录:C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib
完成上述配置后,重新生成,输出如下表示编译完成了:
59>------ 已跳过全部重新生成: 项目: INSTALL, 配置: release x64 ------ 59>没有为此解决方案配置选中要生成的项目 ========== 全部重新生成: 成功 58 个,失败 0 个,跳过 1 个 ==========
运行示例
在 physx\bin\win.x86_64.vc141.mt\debug
目录下会生成很多 .exe
文件,这些都是官方提供的示例,可以直接双击运行。例如 Samples_64.exe 运行结果:
参考
Building with PhysX — NVIDIA PhysX SDK 4.0 Documentation
NVIDIA® PhysX® SDK for Windows ReadMe
PhysX SDK 4.0在Win7下的编译生成
安装DirectX SDK时出现Error Code:s1023 的解决方案
在VS2015中创建一个Physx工程
Unite 2014 - PhysX 3 in Unity 5
PhysX 物理引擎研究(一)源码编译相关推荐
- Tomcat8源码编译及导入Eclipse中研究
最近因为需求需要修改Tomcat中的某些功能,无奈只能研究那部分源码然后稍作修改. 目前Tomcat最新版是8.0,下载了源码包,编译并导入Eclipse中研究比较方便. 1. Tomcat8源码编译 ...
- mysql编译innodb_源码编译MySQL5.1生成InnoDB存储引擎_MySQL
bitsCN.com 源码编译MySQL 5.1生成InnoDB存储引擎 这里就仅列出主要步骤: [plain] ./configure --prefix=/home/mysql51/mysql/ - ...
- 第7篇:Flowable-Modeler集成之Flowable源码编译
接上一篇: 第6篇:Flowable-Modeler详述之常见问题Table act_ge_property doesn't exist https://blog.csdn.net/weixin_40 ...
- MySQL 8.0.22 源码编译安装全过程
墨墨导读: Mysql的8.0版本出来已经有一段时间了,近期研究下源码调试.整个编译过程越来越复杂了. 近期研究下源码调试,MySQL5.7版本源码安装还是比较简单的,有很多例子参考.所以这次选择My ...
- LNMP架构的搭建--源码编译(MYSQL,PHP,nginx)
1.基础知识 1. LNMP架构: LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写.L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指P ...
- LNMP架构的搭建——源码编译(PHP,nginx,Mysql)
一.源码编译 在企业中,我们常常是需要什么模块才会添加什么模块,而源码编译就可以让我们按需安装. yum安装的优缺点: yum安装的优点:安装东西,方便快捷,特别是不用考虑包依赖. yum安装的缺点: ...
- PhysX物理引擎(入门教程) —— PhysX,Hello World!
Author:huawenguang 版权所有 E-MAIL:huawenguang@sina.com DATE:06/7/20 Hi,大家好,好久没有写过东西了.最近在研究物理引擎,在网上搜索 ...
- PhysX物理引擎(编程入门)
PhysX物理引擎(编程入门) --PhysX,Hello World! Author: 华文广 E-MAIL: huawenguang@sina.com DATE:06/7/20 Hi,大家好 ...
- 全网首发:网易云信Duilib 源码编译教程以及可执行演示包下载
序言 Duilib介绍 Duilib是windows平台下的一款轻量级directUI开源库(遵循BSD协议),完全免费,可用于商业软件开发,只需在软件包里附上协议文件即可.Duilib可以简单方便地 ...
最新文章
- php 接收curl json数据格式,curl发送 JSON格式POST数据的接收,以及在yii2框架中的实现原理【精细剖析】...
- java map与set的区别_java 集合(list,set,map)三者之间的关系和区别
- VSCode摸鱼插件 — FreeWindow
- C/C++:Windows编程—代码获取本地所有网卡信息(网卡描述,IP地址,子网掩码,MAC地址)
- 专访阿里巴巴量子实验室:最强量子电路模拟器“太章”到底强在哪?
- SiteServer 迁移至 Windows 2008 R2 问题汇总
- 先弄清事物本身,再去查看评论
- 洛谷 [POI2007]BIU-Offices 解题报告
- 解决struts2标签在HTML中错位的问题
- mongodb-Configuration
- 平面关系:平行,垂直,夹角判定
- xpath无法定位tbody
- Excel使用VBA自动调整列宽
- ip查看服务器信息,如何查看服务器的出口ip地址
- 计算机没有显卡驱动,电脑没有显卡怎么办
- 计算机更新时按了关机6,电脑关机后在安装更新怎么办
- DEDECMS织梦后台更新网站栏目无反应一键更新无响应的解决方法
- nvme固态硬盘开机慢_6个固态硬盘优化设置技巧 让你的SSD速度飞起来 (全文)
- 电影“防火墙” 引发的黑客攻击迅雷(转)
- 个人永久性免费-Excel催化剂功能第95波-地图数据挖宝之IP地址转地理地址及不同经纬度版本转换...
热门文章
- 20_微信小程序-BLE低功耗蓝牙开发-发布小程序
- 定义一个联系人类其中有姓名 电话 年龄 性别 家庭住址 身份证号码 父母联系方式属性和无参构造方法有参构造方法...
- 深度学习入门的建议_来自《简单粗暴Tensorflow2》
- 计算机等级证书怎么考
- MySql---关键字 limit和offset
- 2021年中式面点师(中级)考试内容及中式面点师(中级)考试平台
- TMPGEnc 4.0 XPress(小日本4)优化安装教程
- 聚观早报|网易开放暴雪游戏退款申请通道;鱼跃医疗回应被罚270万
- 自定义Repository的实现方法
- 机器学习笔记03-求导规则与梯度下降算法推导