engine icon indicating copy to clipboard operation
engine copied to clipboard

是否可以给一个GLTF添加点击方法

Open njtyair opened this issue 3 years ago • 7 comments

请教,是否可以给一个GLTF添加点击方法,案例中可以给基础物体添加。是否支持加载的模型呢

Sent from PPHub

njtyair avatar Feb 23 '22 05:02 njtyair

@cptbtptpbcptdtptp 加一个 glTF 点击的案例吧

eyworldwide avatar Feb 23 '22 05:02 eyworldwide

https://codesandbox.io/s/gltf-loader-oasis-engine-0-6-2-forked-kqvo55?file=/index.ts 给 glTF 加点击方法的一个思路,因为有两个兄弟提了这个,我们先临时加了一个,后续完善的版本会在游乐场添加。

cptbtptpbcptdtptp avatar Feb 23 '22 10:02 cptbtptpbcptdtptp

@njtyair

  • glTFCollider 这个类实现了对 glTF 加碰撞的所有逻辑
  • 可以自己选择是否合并 glTF 的包围盒,在 onStart 内执行 mergeBoundBox 或者 BoundBox
  • 注意:合并包围盒后无法知道点击是由 glTF 的哪个部分触发的,但是不合并可以知道
  • cube 的辅助视图只是帮助观察当前碰撞体的位置,不要的话注释 addBoundingBox 中部分代码即可
  • 现在实现还较为潦草,这个里程碑优化后会发布到官网的游乐场中
  • 本例中采用世界坐标系中的 AABB 包围盒子

cptbtptpbcptdtptp avatar Feb 23 '22 10:02 cptbtptpbcptdtptp

部分示意图:

  • 合并包围盒

image

  • 不合并包围盒

image

cptbtptpbcptdtptp avatar Feb 23 '22 10:02 cptbtptpbcptdtptp

@njtyair

  • glTFCollider 这个类实现了对 glTF 加碰撞的所有逻辑
  • 可以自己选择是否合并 glTF 的包围盒,在 onStart 内执行 mergeBoundBox 或者 BoundBox
  • 注意:合并包围盒后无法知道点击是由 glTF 的哪个部分触发的,但是不合并可以知道
  • cube 的辅助视图只是帮助观察当前碰撞体的位置,不要的话注释 addBoundingBox 中部分代码即可
  • 现在实现还较为潦草,这个里程碑优化后会发布到官网的游乐场中
  • 本例中采用世界坐标系中的 AABB 包围盒子

👍🏻👍🏻👍🏻非常感谢

njtyair avatar Feb 23 '22 10:02 njtyair

https://juejin.cn/post/7071169483766759438,这里有一个给模型实现高精度点击的文章,可以试下

Jarod-Xie avatar Apr 09 '22 09:04 Jarod-Xie

https://juejin.cn/post/7071169483766759438,这里有一个给模型实现高精度点击的文章,可以试下

这个是示例哈,高精度点击在 [官网示例](https://oasisengine.cn/0.6/examples#framebuffer-picker) 中就有,可以理解成是基于像素检测的,是像素级别的检查,精准度的提高的同时性能损耗也会变高,我提供的示例里是使用添加包围盒的方式,如果够用在性能上会节省许多。

cptbtptpbcptdtptp avatar Apr 20 '22 03:04 cptbtptpbcptdtptp