我有一个fanfare.reality
我的模型arView
来自现实作曲家。我进行光线投射entity(at:location)
并启用ModelDebugOptionsComponent(visualizationMode: .lightingDiffuse)
被击中的物体的数量,使物体的外观变成灰色。然而,我发现只有喇叭本身变成了灰色,而喇叭上方的旗帜根本没有变化。
我通过以下方式加载 fanfare.realityLoadAsync()
并打印返回值,如下所示。原因是旗帜、星星和号角本身分为3个ModelEntity
。在 RealityKit 中,光线投射通过以下方式搜索实体CollisionComponent
.only 可以添加到具有ModelComponent
.
因此,我的问题是,当我点击屏幕上的模型(通过光线投射)时,如何将整个现实模型变成灰色(扇形+旗帜+星星)。
分离部件模型方法
您可以轻松检索所有 3 个模型。但是您必须指定整个长层次路径:
let scene = try! Experience.loadFanfare()
// Fanfare – .children[0].children[0]
let fanfare = scene.children[0] ..... children[0].children[0] as! ModelEntity
fanfare.model?.materials[0] = UnlitMaterial(color: .darkGray)
// Flag – .children[1].children[0]
let flag = scene.children[0] ..... children[1].children[0] as! ModelEntity
flag.model?.materials[0] = UnlitMaterial(color: .darkGray)
// Star – .children[2].children[0]
let star = scene.children[0] ..... children[2].children[0] as! ModelEntity
star.model?.materials[0] = UnlitMaterial(color: .darkGray)
从以下位置检索模型实体时,我没有看到太大区别.rcproject
, .reality
or .usdz
文件。根据打印的图表,所有三个模型实体都位于同一层次结构级别,它们是同一实体的后代。条件在if statement
可以设置为最简单的形式——如果光线击中碰撞形状 https://stackoverflow.com/questions/60191009/reality-composer-custom-collision-between-entities-of-different-scenes/60192226#60192226 of fanfare
or (||
) flag
or (||
) star
,那么所有三个模型都必须重新着色。
单一模型方法
通过光线投射与 3D 模型交互的最佳解决方案是单一模型方法。单一模型是一个实体 3D 对象,没有单独的部分 - 所有部分都组合成一个完整的模型。单模型的纹理始终是mapped https://stackoverflow.com/questions/58170389/add-texture-to-some-part-of-3d-model/58182496#58182496在 UV 编辑器中。单一模型可以在 Maya 或 Blender 等 3D 创作应用程序中制作。
P.S.
所有经验丰富的 AR 开发人员都知道哇! AR体验与代码无关,而是与 3D 内容有关。您知道,如果您的 3D 模型由许多部分组成,那么就不存在简单解决方案的“灵丹妙药”。使用代码时,制作精良的 AR 模型成功率为 75%.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)