PhysX SDK 3.2 测试程序一例
最近PhysX SDK 3.2 发布了,出于好奇,下载来看了看,发现还是很不错的。相比2.x,变化很大,功能也更加强大。3.1版本中有点让人混乱的库名称也得到了规范,同时还加了两个新的范例。一个是角色布料模拟,一个是自定义重力(这个和Havok中的那个例子基本上是一样的)。
从3.x开始,SDK的范例都用一个Sample框架包装了,研究起来不是太方便,花了点时间写了个测试程序。(CSDN不会排版代码,丑了点,将就看吧)
#include <PxPhysicsAPI.h>
#include <extensions\PxDefaultSimulationFilterShader.h>
#include <extensions\PxExtensionsAPI.h>
#include <extensions\PxDefaultAllocator.h>
#include <extensions\PxDefaultErrorCallback.h>
#include <foundation/PxFoundation.h>
#include <pxtask/PxCudaContextManager.h>
#include <physxprofilesdk\PxProfileZoneManager.h>
#include <PxScene.h>
//3.x开始用命名空间了
using namespace physx;
bool recordMemoryAllocations = true;
//出错的回调函数,Havok也一样,大同小异
static PxDefaultErrorCallback gDefaultErrorCallback;
static PxDefaultAllocator gDefaultAllocatorCallback;
static PxSimulationFilterShader gDefaultFilterShader = PxDefaultSimulationFilterShader;
int main(int argc, char** argv)
{
PxFoundation* mFoundation = PxCreateFoundation(PX_PHYSICS_VERSION, gDefaultAllocatorCallback, gDefaultErrorCallback);
if(!mFoundation){
printf("PxCreateFoundation failed!");
return -1;
}
bool recordMemoryAllocations = true;
//PxProfileZoneManager用来做性能分析用的
PxProfileZoneManager* mProfileZoneManager = &PxProfileZoneManager::createProfileZoneManager(mFoundation);
if(!mProfileZoneManager){
printf("PxProfileZoneManager::createProfileZoneManager failed!\n");
return -1;
}
//检测并初始化CUDA模块,如果你有支持CUDA的显卡,这里就可以用到了。(建议装上最新的显卡驱动,再来测试本程序)。
pxtask::CudaContextManagerDesc cudaContextManagerDesc;
pxtask::CudaContextManager* mCudaContextManager = pxtask::createCudaContextManager(*mFoundation, cudaContextManagerDesc, mProfileZoneManager);
if(mCudaContextManager){
if(!mCudaContextManager->contextIsValid()){
mCudaContextManager->release();
mCudaContextManager = NULL;
}
}
if(mCudaContextManager){
printf("Device Name: %s\n", mCudaContextManager->getDeviceName());
printf("Driver Version: %d\n", mCudaContextManager->getDriverVersion());
printf("Total Bytes: %d\n", mCudaContextManager->getDeviceTotalMemBytes());
printf("core count: %d\n", mCudaContextManager->getMultiprocessorCount());
}
//PxTolerancesScale()是用来做Scale的,不过SDK说还没做出来,只是占个坑
PxPhysics* mPhysics = PxCreatePhysics(PX_PHYSICS_VERSION, *mFoundation,
PxTolerancesScale(), recordMemoryAllocations, mProfileZoneManager);
if(!mPhysics){
printf("PxCreatePhysics failed!\n");
return -1;
}
if(!PxInitExtensions(*mPhysics)){
printf("PxInitExtensions failed!\n");
return -1;
}
physx::PxCooking* mCooking = PxCreateCooking(PX_PHYSICS_VERSION, *mFoundation, PxCookingParams());
if(!mCooking){
printf("PxCreateCooking failed!\n");
return -1;
}
PxScene* mScene;
PxSceneDesc sceneDesc(mPhysics->getTolerancesScale());
sceneDesc.gravity = PxVec3(0.0f, -9.81f, 0.0f);
//创建CPU分发器(字面翻译,我的译法),PxDefaultCpuDispatcherCreate的参数是线程数
pxtask::CpuDispatcher* mCpuDispatcher;
if(!sceneDesc.cpuDispatcher){
mCpuDispatcher = PxDefaultCpuDispatcherCreate(4);
if(!mCpuDispatcher){
printf("PxDefaultCpuDispatcherCreate failed!\n");
return -1;
}
sceneDesc.cpuDispatcher = mCpuDispatcher;
}
if(!sceneDesc.filterShader){
sceneDesc.filterShader = gDefaultFilterShader;
}
//尝试使用GPU分发器
if(!sceneDesc.gpuDispatcher && mCudaContextManager){
sceneDesc.gpuDispatcher = mCudaContextManager->getGpuDispatcher();
}
//创建物理场景,上面搞那么多,其实就为了这一行
mScene = mPhysics->createScene(sceneDesc);
if(!mScene){
printf("createscene failed!\n");
return -1;
}else{
printf("createscene successful!\n");
}
//按顺序一个一个release,否则会提示警告
mPhysics->release();
mCooking->release();
mCudaContextManager->release();
PxCloseExtensions();
mFoundation->release();
return 0;
}
以上就是全部的测试代码了。个人觉得3.2版本的PhysX已经非常成熟了,更加的专业,和他的Havok相比,不分伯仲。如果配合显卡加上CUDA强悍的硬件加速能力,可以说是更胜一筹。顺便说一下,Nvidia还提供了Linux和Android版本的SDK,跨平台做的很好。不像Havok免费版本只能使用两个组件,还必须限定死在Windows平台上。
PhysX SDK 3.2 测试程序一例相关推荐
- 英伟达推出新款“煤气灶”Titan RTX,售价近2万,并开源PhysX SDK
晓查 郭一璞 安妮 乾明 发自 凹非寺 量子位 出品 | 公众号 QbitAI 刚刚,英伟达发布Titan RTX. 和传言一样,Titan RTX配备72 颗Turing RT核心.4608颗CUD ...
- PhysX SDK 编译
1. 说明 1)PhysX版本为4.1 PhysX SDK | NVIDIA Developer SDK版本对cmake和python的版本要求:ReadMe Windows 2)cmake版本为3. ...
- 【昇腾AI系列】 在200DK运行MindX SDK的Yolov3+Resnet50样例
注意:巨坑提醒:python版本和mindx sdk有关联,python3.7.5最高支持的mindx sdk版本为2.0.3 如果使用2.0.4版本,会报错: 如果有遇到这类问题的小伙伴一定要记得注 ...
- Android开发PDA模板例子,Honeywell PDA Android SDK以及开发方法和样例工程
[实例简介] 1.在工程中导入SDK文件DataCollection.jar. 2.在AndroidManifest.xml中加入下面的代码来获取扫描权限. 3.在Activity类(如MainAct ...
- Android 10 中有关限制非 SDK 接口的更新
Android 10 中有关限制非 SDK 接口的更新 目录 浅灰和深灰列表的命名发生变化 非 SDK 接口的代码注释 在 Android 10 中授予对非 SDK 接口的访问权限 Android 1 ...
- 在联盛德W600 SDK上添加C文件并实现GCC编译
以下基于官网上最新的3.04版本(http://www.winnermicro.com/html/1/156/158/497.html)的SDK WM_SDK_W60X_G3.04.00 为例来详细说 ...
- NVIDIA PhysX宣布正式开源 最强物理仿真引擎
2019独角兽企业重金招聘Python工程师标准>>> 近日,辉达(NVIDIA)在官方部落格宣布正式开源被誉为「市面最强大物理仿真引擎」的 PhysX,除了广泛用于提升游戏特效,还 ...
- 踩坑!穿山甲广告Android SDK接入
随着流量变现的兴起,越来越多的广告SDK汹涌而来,除了字节的穿山甲,还有腾讯的优量汇.百度的广告联盟,其他的例如AdView和万普世纪已经逐渐退出历史的舞台. 本篇文章将基于com.pangle.cn ...
- 海康机器人工业相机sdk简介
海康机器人工业相机SDK获取与简单介绍 SDK下载 SDK组成 1.头文件 2.静态库/lib库 3.动态库 4.开发文档 5.示例程序 SDK下载 在海康机器人的官网下载中心-> 海康机器人下 ...
最新文章
- 6.10 docker(三) 终止
- 计算机组成原理实验认识多思网络虚拟实验系统_3D全息投影,裸眼3D,全息互动投影系统...
- hud-1495--非常可乐 VS nyoj-21--三个水杯
- IDEA中找不到maven插件Plugin ‘org.apache.tomcat.maven:tomcat7-maven-plugin:2.2‘ not found
- 职坐标 MySQL视频_测试工具之MySQLSlap使用实例
- HDU 6188 Duizi and Shunzi
- 安装IPython攻略
- Hierarchical voxel block hashing for effiecient integration of depth images
- 深度学习2.0-1.tensorflow的基础操作之数据类型
- ubuntu jdk install
- live2d_Live2d( 动画制作软件 )中文版分享
- 新版TP开发小额贷系统源码+可封装IOS安卓双端
- 使用Python来计算均值、中位数、标准差
- 如何对自己定义的目标进行分解
- 带隙基准(BG)的基本原理与结构
- 架构学习——Redis内存数据库学习要点
- 使用你的linux系统下载BT
- libzip解压缩方法分析
- html5建议使用,[HTML5]label标签使用以及建议
- 【C语言】利用rand函数不重复地生成不重复的数组发牌且配对!扑克牌管理操作系统的升级与优化(CodeBlocks)
热门文章
- 基于AM5728 DSP+ARM平台实现无线地磁车辆检测网关
- jee mysql 驱动_eclipsejee怎么连接mysql数据库
- 使用OpenCV,Haar级联检测器进行面部、眼睛、嘴部检测
- 如何将房室模型运用到数学建模中?——气体传感器响应分析(校内赛)
- 如何打开 QT助手
- Java的UDP服务端
- mPaaS 客户端证书错误避坑指南
- 无“微”而至的超低功耗的微型控制器TMI3191替代SGM6031/6
- event.target与event.currentTarget的差异
- 帅呆了,sancho+mldonkey