PhysX 3.2里的布料模拟(2):创建

接那遥远的上一章PhysX 3.2里的布料模拟(1),呵呵。近一段时间比较忙,更新较慢,请见谅。废话少说,继续介绍PhysX 3.2中的布料特性吧。这一节中,我们看创建的过程。

我们上一节中提到过,PhysX 3.2中,布料的模拟有三个基本的东西:布料自身的模型;布料的模拟属性;还有就是布料的碰撞体设置。这三个中,布料的模型是模拟最最基本的东西,如论如何你都需要有模型,SDK才知道要去模拟什么东西,呵呵。后面两个,则需要根据实际需求来确定,具体该如何设置和实时调整,就因游戏而异了。

 

首先,我们看布料的模型。在PhysX 3.2中,布料的模型是用 PxClothMeshDesc 这个数据结构来封装的,封装了两方面的信息:一个是基本的网格模型,也就是三角形的顶点坐标序列和组成三角网格的顶点索引序列;还有一个就是对网格模型的一些属性定义,如无特殊需求,一般不需关注,这里也就不多说了。

在实际实用中,PxClothMeshDesc的数据来源可能是从我们某个导出的模型中取得的,这种情况,我们可以参考SDK开发包中 \Samples\SampleBase\TestClothHelpers.cpp 文件中定义的  createMeshFromObj 函数。

有些时候,我们的模型用的更简单些,比如我们就是做的一些旗帜摆放在场景中,增加场景的动态感,这种情况,可以参考上面文件中的 createMeshGrid 函数的实现,偷懒一点直接使用也可以。偷笑

 

然后,我们看布料的模拟属性。布料的模拟属性,大致可以这么分为三类:一类是一些基本的属性,比如场景中的位置GlobalPosition、Sleeping相关的设置、GPU还是CPU模拟等;另一类是布料顶点之间的约束属性,这一点,我们在PhysX 3.2里的布料模拟(1)中已经做了基本介绍,这里只说明是用PxClothFrabic来封装的吧;最后一类就是运动约束的属性,这类属性虽然定义布料的运动约束,但是与跟碰撞形体之间的碰撞产生的运动约束不同,这一类属性,定义的是布料的可活动范围,比如MotionConstraints。

前两类属性是模拟过程需要使用到的,PhysX SDK会根据这些属性来模拟布料,最后一类属性是对模拟结果的限制,不是纯物理的东西,但是对实际游戏来说,却是非常实用的。比如MotionConstraint定义的是布料的每一个顶点最终的模拟结果必须要在某个位置+半径构成的球形空间内,模拟结果超出范围的也会被限制在这个空间之内。在网游中,人物的瞬移是非常普遍的事情,有些时候瞬移的位移还会比较大,这种情况下,如果纯粹依赖模拟的话,那么结果必然是布料拉伸严重,有些情况下还会由于收敛性不好,导致布料来回抖动;这种情况下,如果加上MotionConstraints限制每个顶点的活动范围,那么可以预见,模拟结果将更加可控,效果也更好。

 

最后,我们看碰撞体的设置。在PhysX 3.2中,布料的碰撞形体有球形 PxClothCollisionSphere 和碰撞平面  PxClothCollisionPlane 两类;基于这两类,还有两个衍生的类型,一个是由Sphere组成的胶囊体Capsule,另一个是有平面组成的凸包Conv

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值