当前位置: 首页 > 面试题库 >

RealityKit –以编程方式将材料添加到ModelEntity

冯茂实
2023-03-14
问题内容

对于RealityKit的文档包括结构:OcclusionMaterialSimpleMaterial,和UnlitMaterial用于添加材料到ModelEntity

或者,您可以在模型中加载带有附加材料的模型。

我想以ModelEntity编程方式添加定义材料/纹理。如何在不向Reality
Composer或其他3D软件的模型中添加材料的情况下即时实现这一目标?


问题答案:

已更新:2020年6月23日

目前,RealityKit 2.0中有4种类型的材料

  • 简单材质
  • 不发光材料
  • 咬合材料
  • VideoMaterial(查看此帖子以了解如何进行设置)

因此,您可以将以下代码用于一个SimpleMaterial()类:

@IBOutlet var arView: ARView!

let sceneObjects = try! Experience.loadAllMyObjects()

var simpleMaterial = SimpleMaterial()

simpleMaterial.baseColor = try! MaterialColorParameter.texture(
                                          TextureResource.load(named: "img.jpg"))

simpleMaterial.metallic = MaterialScalarParameter(floatLiteral: 0.9)
simpleMaterial.roughness = MaterialScalarParameter(floatLiteral: 0.1)
simpleMaterial.tintColor = UIColor.yellow

/*

simpleMaterial.baseColor = MaterialColorParameter.color(UIColor(red: 0.7,
                                                              green: 0.5,
                                                               blue: 0.2,
                                                              alpha: 1.0))
*/

目前,RealityKit中只有4种方法可以创建简单的3D图元:

  • generateBox()
  • generateSphere()
  • generatePlane()
  • generateText()

因此,让我们使用其中之一:

let mesh: MeshResource = .generateBox(size: 2.5)

let component = ModelComponent(mesh: mesh, 
                          materials: [simpleMaterial])

sceneObjects.components.set(component)
arView.scene.anchors.append(sceneObjects)

我们知道在SceneKit中有5种不同的着色模型,因此我们可以使用RealityKit
SimpleMaterialUnlitMaterial生成我们习惯的所有这五个着色器。

让我们看一下它的样子:

SCNMaterial.LightingModel.blinn            –  SimpleMaterial(color: . gray,
                                                         roughness: .float(0.5),
                                                        isMetallic: false)

SCNMaterial.LightingModel.lambert          –  SimpleMaterial(color: . gray,
                                                         roughness: .float(1.0),
                                                        isMetallic: false)

SCNMaterial.LightingModel.phong            –  SimpleMaterial(color: . gray,
                                                         roughness: .float(0.0),
                                                        isMetallic: false)

SCNMaterial.LightingModel.physicallyBased  –  SimpleMaterial(color: . gray,
                                                         roughness: .float(0.0),
                                                        isMetallic: true)

SCNMaterial.LightingModel.constant         –  UnlitMaterial(color: .gray)


 类似资料:
  • 我正在尝试在Android上添加Wifi网络,我想知道如何连接到不广播其SSID的Wifi网络(它是否有空SSID或带有\0s的清晰SSID)。 这是我目前用于广播其SSID的Wifi网络的内容:

  • AndroidR、 属性。selectableItemBackground存在,但如何通过编程将其添加到ImageButton? 此外,我如何在文档中找到答案?这里提到过,但我看不到任何关于它实际如何使用的解释。实际上,我似乎很少发现文档有用,但我希望这是我的错,而不是文档的错。

  • 问题内容: 我试图自定义现有的JS库,而不修改原始JS代码。这段代码将加载一些我可以访问的外部JS文件,而我想做的就是更改原始文件中包含的功能之一,而无需将整个内容复制并粘贴到第二个JS文件中。 因此,例如,禁区JS可能具有以下功能: 我希望能够以某种方式在该函数中追加或添加一些JS代码。原因主要是在原始的不可触摸的JS中,该功能非常庞大,如果该JS得到更新,则我用它覆盖的功能将过时。 我不确定这

  • Spring非常出色地为注释提供了一个属性。我希望以编程方式提供带有时区的方法。 例如,假设我想在当地时间午夜打开洛杉矶和芝加哥大楼的灯。我想从我的存储库中获取建筑物。 时区可以在运行时提供还是以其他方式注入? 比如: 我知道方法不能接受任何参数,所以以这种方式提供时区是不行的。

  • 问题内容: 由于采用了插件架构,因此我试图以编程方式将bean添加到我的webapp中。我有一个通过注释创建的Spring bean ,并且正在实现接口。 我的覆盖函数如下所示: 基本上,我不知道如何向给setApplicationContext的applicationContext对象添加一个bean。谁能告诉我我将如何处理错误的方法? 好的,这就是我最终得到的解决方案: 问题答案: 在Spri

  • 问题内容: 是否可以通过编程将xml属性设置为标题,然后使用将该属性用于动画? 这就是我声明我的方式: 这是我的xml声明: 为了添加动画,我必须使用以下代码: 如何将(?)标题传递给函数? 问题答案: 是的,这是可能的: 扩展的类能够调用 例如: 更新 似乎您专门尝试共享标题,因此我将执行以下操作: MainActivity的示例xml: 然后在“活动”参考中,该视图: 然后在您的SecondA