blender导出gltf无法进行碰撞体检测问题及解决

文章探讨了在JavaScript中使用raycaster进行碰撞检测时,遇到gltf模型中SkinnedMesh类型的组件无法被检测到的问题。原因是SkinnedMesh用于骨骼动画,其皮肤绑定特性导致在检测中与Mesh类型表现不同。解决方法可能涉及到对皮肤绑定模型的处理方式或调整导出设置。
摘要由CSDN通过智能技术生成

js中使用了raycaster.intersectObjects(colliders)进行碰撞体检测,将gltf中的组件添加到colliders中,却发现函数返回值一直是0。用了另一个可以进行检测的gltf文件比较差异,发现gltf下组件的种类有所区别。

这是无法进行碰撞体检测时console.log()打印出的物体信息,物体类型为SkinnedMesh

 

 这是可以进行碰撞体检测时console.log()打印出的物体信息,物体类型为Mesh。

区别在于使用blender导出gltf时是否在“操作项预设”下的“动画”中选中“蒙皮”选项,选中时导出的材质即为SkinnnedMesh,则无法被检测到。

问了一下gpt,这是它对两种材质区别的解释:

“在gltf中,MeshSkinnedMesh都是表示3D模型网格的节点类型。它们之间的区别在于是否进行皮肤绑定(skinning)。

Mesh节点用于表示不进行皮肤绑定的网格模型,也就是静态网格模型。这种类型的节点包含一个或多个Primitive子节点,每个Primitive节点包含了一组定义了顶点数据、拓扑结构和材质信息的网格数据。

相比之下three.js,SkinnedMesh节点用于表示进行皮肤绑定的网格模型,也就是骨骼动画模型。这种类型的节点包含了一个Skin节点,其中定义了骨骼的层级结构及其与网格的绑定方式,以及一个或多个Primitive子节点,在每个Primitive节点中定义了网格的具体数据。在进行渲染时,SkinnedMesh节点会根据骨骼的变换对网格进行实时的变形,从而实现骨骼动画效果。”

似乎是因为两种材质对几何形状的属性定义不一致,导致Mesh可以被检测到而SkinnedMesh不行(如有说错欢迎纠正)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值