本文介绍了如何在使用光线投射时重新着色模型的所有部件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的arView
Reality Composer中有一个fanfare.reality
模型。我按entity(at:location)
进行光线投射,并启用对象的ModelDebugOptionsComponent(visualizationMode: .lightingDiffuse)
命中,这会使对象的外观变为灰色。然而,我发现只有旗帜本身变灰了,旗帜上的旗帜根本没有变化。
我通过LoadAsync()
加载fan fare.reality并打印返回值,如下所示。原因是国旗、星星和旗帜本身被分成3个ModelEntity
。在RealityKit中,raycast搜索CollisionComponent
的实体。只能添加到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
或.usdz
文件中检索模型实体时,我看不到有太大区别。根据打印的图,所有三个模型实体位于同一层次结构的同一级别,它们是同一实体的后代。if statement
中的条件可以设置为其最简单的形式-如果射线击中fanfare
或(||
)flag
或(||
)star
的collision shape,则所有三个模型都必须重新着色。
单一模型方法
通过光线投射与3D模型交互的最佳解决方案是单模型方法。单一模型是没有单独零件的实体3D对象-所有零件都组合成一个完整的模型。单色模型的纹理在UV编辑器中始终为mapped。这种单一模型可以在Maya或Blender等3D创作应用程序中制作。
附注
所有经验丰富的AR开发人员都知道哇!AR体验不是关于代码,而是关于3D内容。你应该明白,如果你的3D模型由很多部分组成,就没有什么灵丹妙药可以提供简单的解决方案。使用代码时,制作精良的AR模型成功率为75%。
这篇关于如何在使用光线投射时重新着色模型的所有部件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!