PhysX学习笔记(2): 动力学(1)

场景(Scene):

物理模拟发生的场所, 包含了actor, joint, effector. 跟图形引擎里的Scene差不多, 可以有多个实例存在, 互不干涉.

场景没有特别的大小限制. 功能有重力, 射线拣取, 开关硬拼检测等.

模拟时序(Timing):

物理模拟导致物体的一些属性随着时间进行变化, 如位置, 速度等.

模拟每经过一次时间步进进行一次, 通常要与渲染帧数进行同步.

前进(也可以说是更新):

void simulate(NxReal elapsedTime);

elapsedTime会被分成多个时间步进来决定物理模拟进行了多少

时序可以用setTiming设置, decriptor也可. 默认值就能够满足大多数程序的要求了.

固定的时间步进可以确保稳定且可以重现的物理模拟, 需指定NX_TIMESTEP_FIXED.

异步的步进:

PhysX是多线程的, 物理模拟发生在自己的线程里. 状态变化如下:

1) 开始模拟

2) 确保数据已被发送到模拟线程

3) 检测模拟是否完成, 如果是, 更新状态数据缓冲, 并且->

4) 交换状态数据缓冲, 这样结果可以被程序访问, 后台缓冲可以继续参数模拟(就像D3D的BackBuffer)

NxScene* gScene;  
NxReal myTimestep = 1.0f/60.0f;  
...  
void mySimulationStepFunction()  
{  
    gScene->simulate(myTimestep);  
    gScene->flushStream();  
 //...perform useful work here using previous frame's state data 
    gScene-> fetchResults(NX_RIGID_BODY_FINISHED, true);  
}  

注意fetchResults(NX_RIGID_BODY_FINISHED, true)是一个阻塞调用, 可以用这两种方式代替:

while(!gScene->checkResults(NX_RIGID_BODY_FINISHED, false)  
{  
 // do something useful 
}  
while(!gScene->fetchResults(NX_RIGID_BODY_FINISHED, false)  
{   
 // do something useful 
}  

注意: 一些函数对于异步的状态改变不可知, 如overlap和raycasting, 直到simulte()/fetchResult()执行后才可.

外壳宽度(Skin Width):

通俗点说, 就是能两个物体能相互插入多么深….. 因为模拟是以时间步进为单位的, 所以两次步进之间就会产生一个跳变, 这种互相越界的现象不可避免. 于是乎引入这么一个量, 用于保证稳定性.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏刘望舒

Android绘制优化(一)绘制性能分析

前言 一个优秀的应用不仅仅是要有吸引人的功能和交互,同时在性能上也有很高的要求。运行Android系统的手机,虽然配置在不断的提升,但仍旧无法和PC相比,无法做...

2115
来自专栏深度学习那些事儿

在WordPress中使用Markdown进行写作的正确姿势

在wordpress中使用markdown语法来进行写作,是很多wordpress博主都要想到的一点。虽然说现在wordpress已经“原生”支持wordpre...

5.7K8
来自专栏腾讯NEXT学位

小游戏内存优化与性能优化

? | 导语 听说你的小游戏内存超标?进来了解一下吧。 本文主要跟大家一起来探讨一下Cocos Creator小游戏开发过程中内存优化、性能优化和包体优化。 ...

3.7K1
来自专栏玉树芝兰

如何用Markdown写论文?

本文用简明的样例,介绍如何使用Markdown和自动化工具帮你处理数学公式、参考文献引用、图片交叉索引等学术论文写作中常见的棘手问题。快来试试吧。

4302
来自专栏上善若水

053[转]Android开发中如何匹配layout资源(layout-sw480dp layout-sw600dp-land layout-sw720dp-port)

ps : 很不错的文章,今天正好遇到类似问题,看到这篇文章,很顺利的找到了出错的layout。感谢一下

1562
来自专栏落影的专栏

iOS性能优化——图片加载和处理

本文基于WWDC2018-Image and Graphics Best Practices,对图片加载和处理的思考和总结。 本文不是WWDC翻译,如果需要了...

3063
来自专栏walterlv - 吕毅的博客

关闭模态窗口后,父窗口居然跑到了其他窗口的后面

发布于 2018-02-05 05:58 更新于 2018-06...

871
来自专栏企鹅号快讯

技术分享连载|UGUI对于emoji表情的处理|加载资源时的内存波动|Animator采样……

我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。 内存管理 Q:...

3936
来自专栏云计算与大数据

研发:jenkins ios应用打包

持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。

1643
来自专栏灯塔大数据

职场必备:Excel2016四个超强的数据分析功能

摘要 三维地图、预测工作表、引用外部数据查询、数据透视表更强大的功能改进、将Excel 表格发布到Office 365 Power BI实现数据的商业智能分析...

2927

扫码关注云+社区

领取腾讯云代金券