最近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 测试程序一例相关推荐

  1. 英伟达推出新款“煤气灶”Titan RTX,售价近2万,并开源PhysX SDK

    晓查 郭一璞 安妮 乾明 发自 凹非寺 量子位 出品 | 公众号 QbitAI 刚刚,英伟达发布Titan RTX. 和传言一样,Titan RTX配备72 颗Turing RT核心.4608颗CUD ...

  2. PhysX SDK 编译

    1. 说明 1)PhysX版本为4.1 PhysX SDK | NVIDIA Developer SDK版本对cmake和python的版本要求:ReadMe Windows 2)cmake版本为3. ...

  3. 【昇腾AI系列】 在200DK运行MindX SDK的Yolov3+Resnet50样例

    注意:巨坑提醒:python版本和mindx sdk有关联,python3.7.5最高支持的mindx sdk版本为2.0.3 如果使用2.0.4版本,会报错: 如果有遇到这类问题的小伙伴一定要记得注 ...

  4. Android开发PDA模板例子,Honeywell PDA Android SDK以及开发方法和样例工程

    [实例简介] 1.在工程中导入SDK文件DataCollection.jar. 2.在AndroidManifest.xml中加入下面的代码来获取扫描权限. 3.在Activity类(如MainAct ...

  5. Android 10 中有关限制非 SDK 接口的更新

    Android 10 中有关限制非 SDK 接口的更新 目录 浅灰和深灰列表的命名发生变化 非 SDK 接口的代码注释 在 Android 10 中授予对非 SDK 接口的访问权限 Android 1 ...

  6. 在联盛德W600 SDK上添加C文件并实现GCC编译

    以下基于官网上最新的3.04版本(http://www.winnermicro.com/html/1/156/158/497.html)的SDK WM_SDK_W60X_G3.04.00 为例来详细说 ...

  7. NVIDIA PhysX宣布正式开源 最强物理仿真引擎

    2019独角兽企业重金招聘Python工程师标准>>> 近日,辉达(NVIDIA)在官方部落格宣布正式开源被誉为「市面最强大物理仿真引擎」的 PhysX,除了广泛用于提升游戏特效,还 ...

  8. 踩坑!穿山甲广告Android SDK接入

    随着流量变现的兴起,越来越多的广告SDK汹涌而来,除了字节的穿山甲,还有腾讯的优量汇.百度的广告联盟,其他的例如AdView和万普世纪已经逐渐退出历史的舞台. 本篇文章将基于com.pangle.cn ...

  9. 海康机器人工业相机sdk简介

    海康机器人工业相机SDK获取与简单介绍 SDK下载 SDK组成 1.头文件 2.静态库/lib库 3.动态库 4.开发文档 5.示例程序 SDK下载 在海康机器人的官网下载中心-> 海康机器人下 ...

最新文章

  1. 6.10 docker(三) 终止
  2. 计算机组成原理实验认识多思网络虚拟实验系统_3D全息投影,裸眼3D,全息互动投影系统...
  3. hud-1495--非常可乐 VS nyoj-21--三个水杯
  4. IDEA中找不到maven插件Plugin ‘org.apache.tomcat.maven:tomcat7-maven-plugin:2.2‘ not found
  5. 职坐标 MySQL视频_测试工具之MySQLSlap使用实例
  6. HDU 6188 Duizi and Shunzi
  7. 安装IPython攻略
  8. Hierarchical voxel block hashing for effiecient integration of depth images
  9. 深度学习2.0-1.tensorflow的基础操作之数据类型
  10. ubuntu jdk install
  11. live2d_Live2d( 动画制作软件 )中文版分享
  12. 新版TP开发小额贷系统源码+可封装IOS安卓双端
  13. 使用Python来计算均值、中位数、标准差
  14. 如何对自己定义的目标进行分解
  15. 带隙基准(BG)的基本原理与结构
  16. 架构学习——Redis内存数据库学习要点
  17. 使用你的linux系统下载BT
  18. libzip解压缩方法分析
  19. html5建议使用,[HTML5]label标签使用以及建议
  20. 【C语言】利用rand函数不重复地生成不重复的数组发牌且配对!扑克牌管理操作系统的升级与优化(CodeBlocks)

热门文章

  1. 基于AM5728 DSP+ARM平台实现无线地磁车辆检测网关
  2. jee mysql 驱动_eclipsejee怎么连接mysql数据库
  3. 使用OpenCV,Haar级联检测器进行面部、眼睛、嘴部检测
  4. 如何将房室模型运用到数学建模中?——气体传感器响应分析(校内赛)
  5. 如何打开 QT助手
  6. Java的UDP服务端
  7. mPaaS 客户端证书错误避坑指南
  8. 无“微”而至的超低功耗的微型控制器TMI3191替代SGM6031/6
  9. event.target与event.currentTarget的差异
  10. 帅呆了,sancho+mldonkey