当前位置: 首页 > news >正文

uniApp开发XR-Frame微信小程序创建3D场景 (8) 刚体碰撞

上一篇文章, 我们讲解了

xr-frame 框架下的粒子系统https://blog.csdn.net/weixin_39318421/article/details/137097137?spm=1011.2415.3001.5331

本篇文章, 我们讲解一下xr-frame框架下刚体和碰撞体的设置方法。

一.物理系统

要学习刚体,我们首先要明白xr-frame框架下的物理系统

场景中,要开启物理系统,我们需要在 <xr-scene> 标签下 配置一个 <xr-physics> 标签。

<xr-scene><xr-physics />...(场景中的其他标签)
</xr-scene>

这个 xr-physics 标签代表场景中开启了物理系统,物理系统主要有两个属性

disabled是否禁用物理booleandisable=true的话,效果和不存在<xr-physics>标签时一致。
gravity全局重力Vector3默认重力(0, -9.8, 0)

这个 gravity 默认为-9.8.也就是说在Y轴上负方向的加速度为9.8,用来模拟重力的作用。

二. 刚体

有了物理系统,我们要让某个几何体实现自由落体的运动,就需要给这个几何体设置刚体。

<xr-mesh 
sphere-shape 
shape-interact="collide:true;bounciness:0.9" 
rigidbody="mass:5.0" 
node-id="mesh-sphere" 
position="0 1 0" 
scale="0.7 0.7 0.7" 
geometry="sphere"  
material="ballMat">
</xr-mesh>

上面的代码中我们给一个球体设置了刚体组件 rigidbody 并且给刚体属性 mass 设置了一个5.0

disabled是否禁用刚体booleandisable=true的话,效果和不存在rigidbody属性时一致。
mass刚体质量numbermass > 0
useGravity是否受重力影响boolean
constraintsMask限制刚体在某个轴上的移动number

上面是刚体组件可以设置的主要属性。

完成了这些配置,我可以看到模拟器中,球体受重力影响加速下坠的物理运动。

三.碰撞

上一步,我们给小球设置了刚体,这一步我们再在场景中加入一个长方形几何体作为桌面,让小球与桌面发生碰撞回弹。

<xr-mesh 
cube-shape 
shape-interact="collide:true;bounciness:1" 
node-id="mesh-plane" 
position="0 -1 0" 
rotation="0 0 0" 
scale="7 0.1 7" 
geometry="cube" 
material="tableMat">
</xr-mesh>

现在模拟器中预览一下:

这里需要注意,我们并没有给作为桌面的长方形几何体设置刚体,因为刚体的运用主要是为了受物理效果影响。

(1)轮廓 Shape

上面代码中,首先我们设置了几何体的轮廓。

cube-shape

碰撞实际上是轮廓和轮廓间的接触实现的。所需首先需要给两个几何体都设置好轮廓

(2)轮廓交互 interact

轮廓设置好后,我们还要给两个几何体设置轮廓交互

shape-interact="collide:true;bounciness:1"

这里就是设置的轮廓交互,其属性解释如下

disabled是否禁用交互booleandisable=true的话,效果和不存在shape-interact属性时一致
collide是否发生碰撞booleancollide=true的话,发生碰撞,否则发生重叠,默认false
bounciness弹性系数number0≤bounciness≤1,仅当collide=true时生效
staticFriction静摩擦系数number0≤staticFriction≤1,仅当collide=true时生效
dynamicFriction动摩擦系数number0≤staticFriction≤1,仅当collide=true时生效

在这个实例中,我们将 collide 设置为 true ,也就是要发生碰撞。

bounciness 设置为了1,也就是最大弹性。

再次观察模拟器,我们可以看到小球在桌面上不断做回弹运动。

四.交互事件

碰撞后,我们有时需要做一些后续的处理,这里就涉及到交互事件,我们在桌面几何体上绑定一个碰撞回调函数

<xr-mesh cube-shape shape-interact="collide:true;bounciness:1" 
bind:collide-begin="handleCollideBegin" 
node-id="mesh-plane" 
position="0 -1 0" 
rotation="0 0 0" 
scale="7 0.1 7" 
geometry="cube" 
material="tableMat"></xr-mesh>

代码中

bind:clloide-begin="handleCollideBegin"

就是桌面受到碰撞后的回调函数,我们简单在index.js文件中加入处理函数。

//碰撞回调
handleCollideBegin(e){console.log(e)
}

这里只是简单地打印了一个碰撞事件,大家可以通过调试器Console面板查看。

五.注意

(1)刚体物理功能目前尚在Beta阶段,并且需要2.32.1及之后的基础库才能使用。

(2)<xr-physics>标签只能位于<xr-scene>下一级,不能放置在更深的层级中。

六.附件说明

附件中的代码就是本篇文章用到的模型点击交互识别的xr-frame组件中的代码。

大家可以参考学习,如果不会配置需要查看一下这篇文章,xr-frame基础环境搭建。

七.示例小程序

附件中的示例小程序,是我根据官方指南做的一个简易的示例程序,其中运用了场景的搭建,材质动态修改,模型动态添加与删除,粒子特效等功能,可以作为本篇文章的参考。


文章转载自:

http://tdo26C95.dcbsj.cn
http://edqa7Lyz.dcbsj.cn
http://VFQriUAN.dcbsj.cn
http://IB0q7BPA.dcbsj.cn
http://k49BI1iG.dcbsj.cn
http://ytxRbls4.dcbsj.cn
http://erxVRnDv.dcbsj.cn
http://KqXSM5gM.dcbsj.cn
http://P6myBxui.dcbsj.cn
http://zlKzmclC.dcbsj.cn
http://bLLmqAXq.dcbsj.cn
http://F2O3ifrG.dcbsj.cn
http://ayxfA6oX.dcbsj.cn
http://KKHMutv5.dcbsj.cn
http://QH2zIgtQ.dcbsj.cn
http://vQvhCFqX.dcbsj.cn
http://1xe5mycS.dcbsj.cn
http://g3kykofQ.dcbsj.cn
http://rjL5nsLw.dcbsj.cn
http://PZGUjiHk.dcbsj.cn
http://w3l0WqjG.dcbsj.cn
http://OVXiyT54.dcbsj.cn
http://1tYNMESp.dcbsj.cn
http://k2ZoxUjA.dcbsj.cn
http://mF27jlsh.dcbsj.cn
http://O3zC6Xph.dcbsj.cn
http://N3gqTQz8.dcbsj.cn
http://zUIXAFNP.dcbsj.cn
http://8EHOtOW7.dcbsj.cn
http://gJmuxBOI.dcbsj.cn
http://www.dtcms.com/a/385802.html

相关文章:

  • NPM 常用命令
  • Windows 11 安装使用 nvm,Node.js、npm多版本管理、切换
  • AI Compass前沿速览:GPT-5-Codex 、宇树科技世界模型、InfiniteTalk美团数字人、ROMA多智能体框架、混元3D 3.0
  • 苹果上架全流程指南 苹果应用上架步骤、iOS 应用发布流程、uni-app 打包上传 ipa 与 App Store 审核经验分享
  • 旗讯 OCR 识别系统深度解析:一站式解决表格、手写文字、证件识别难题!
  • strip()函数使用注意点
  • 好用的开源日志库:Easylogger解析与移植STM32
  • django入门-数据库基本操作
  • springboot的项目实现excel上传功能
  • 从 Docker 守护进程获取实时事件
  • TCP编程:socket概念及使用方法(基础教程)
  • Python 在运维与云原生领域的核心应用:从基础到实践
  • 项目实战:Rsync + Sersync 实现文件实时同步
  • 云原生是什么
  • Docker 镜像瘦身实战:从 1.2GB 压缩到 200MB 的优化过程
  • RabbitMQ消息中间件
  • 2019年下半年 系统架构设计师 案例分析
  • OpenAI编程模型重磅升级!GPT-5-Codex发布,动态思考机制实现编程效率倍增
  • 数据结构排序入门(2):核心排序(选择排序,快速排序及优化)
  • 达索系统 SIMULIA 大中华区用户大会启幕,迅筑科技分享设计仿真一体化落地方案
  • 未来已来:当清洁成为一场静默的科技交响
  • 从零开始手写机器学习框架:我的深度学习之旅
  • Qt QML Switch和SwitchDelegate的区别?
  • MATLAB 线弹性 + 裂纹扩展 1D2D3D 统一框架
  • 基于Qt的跨平台全局输入事件监控技术实现
  • 从0到1入门JVM
  • Tessent_ijtag_ug——第 5 章IJTAG 网络插入 (1)
  • leetcode238.除自身以外数组的乘积
  • 【数据工程】6. 数据库、数据仓库与数据湖 (Databases, Data Warehouses and Data Lakes)
  • 180 课时吃透 Go 语言游戏后端系列0:序言