【问题标题】:How to interact with 3D objects in RealityKit如何在 RealityKit 中与 3D 对象交互
【发布时间】:2019-07-08 10:05:47
【问题描述】:

3D 对象的交互问题。我发现了一些 RealityKit 的 beta 功能,例如 PhysicsBodyComponent、applyImpulse、addForce、applyAngularImpulse 等。

我试图为对象“花瓶”添加物理特性,并在点击或类似事件时产生对对象的冲动。

真的很奇怪,执行命令后,物理特性正常添加,同时脉冲和力没有添加到对象中(见下文调试输出)。

调试打印输出:

Something 1 Optional(RealityKit.PhysicsBodyComponent(mode: RealityKit.PhysicsBodyMode.dynamic, massProperties: RealityKit.PhysicsMassProperties(mass: 0.2,惯性: SIMD3(0.1, 0.1, 0.1), centerOfMass: (位置: SIMD3(0.0, 0.0) , 0.0), 方向: simd_quatf(real: 1.0, imag: SIMD3(0.0, 0.0, 0.0)))), 材质: RealityKit.PhysicsMaterialResource, isTranslationLocked: (x: false, y: false, z: false), isRotationLocked: (x: false, y: false, z: false), isContinuousCollisionDetectionEnabled: false, teleport: false, userForce: SIMD3(0.0, 0.0, 0.0), userTorque: SIMD3(0.0, 0.0, 0.0), userLinearImpulse: SIMD3(0.0, 0.0, 0.0), userAngularImpulse: SIMD3(0.0, 0.0, 0.0)))

Something 5 Optional(RealityKit.PhysicsBodyComponent(mode: RealityKit.PhysicsBodyMode.dynamic, massProperties: RealityKit.PhysicsMassProperties(mass: 0.2,惯性: SIMD3(0.1, 0.1, 0.1), centerOfMass: (位置: SIMD3(0.0, 0.0) , 0.0), 方向: simd_quatf(real: 1.0, imag: SIMD3(0.0, 0.0, >0.0)))), 材质: RealityKit.PhysicsMaterialResource, isTranslationLocked: (x: false, y: false, z: false), isRotationLocked : (x: false, y: false, z: false), isContinuousCollisionDetectionEnabled: false, teleport: false, userForce: SIMD3(0.0, 0.0, 0.0), userTorque: SIMD3(0.0, 0.0, 0.0), userLinearImpulse: SIMD3(0.0) , 0.0, 0.0), userAngularImpulse: SIMD3(0.0, 0.0, 0.0)))

正如我们所见,函数不会向对象“花瓶”添加冲动和力。也许我做错了什么。

【问题讨论】:

  • 我不明白为什么这被否决了。文档确实很少。 API 一切都是不言自明的。

标签: swift augmented-reality arkit realitykit reality-composer


【解决方案1】:

我认为您不应该直接创建 ModelEntity 的实例。我认为这是 Entity 类的内部组件,仅代表网格。您可以直接使用RealityKit 中的组件来增强交互/动画。这些适用于整个实体对象。我认为这与创建 Metal 视图的方式类似,需要 Core Animation 层支持它才能访问用户交互。

如果您查看SwiftStrike sample application,它们不会直接实例化ModelEntity,这让我相信在Entity 对象之外创建它们并不是最佳实践。

我相信您会通过 Reality Composer 将您的花瓶添加到项目中。您可以在那里应用材质和碰撞。您还可以添加响应触摸等行为。然后,您可以通过 Xcode 中的现实作曲家文件访问花瓶,并将组件添加到将转换其位置的花瓶实体。所有实体都有一个转换组件,记录在 here

RealityKit 感觉它旨在尽可能多地从程序员那里抽象出代码,因此许多底层架构并未真正公开或记录。它也没有按照我的组织方式进行组织,但我对实体-组件设计模式不太熟悉。

如果您不喜欢 RealityKit 的布局方式,您还可以选择使用 SceneKit 作为渲染器。这不会抽象出尽可能多的功能,并允许您直接在对象上使用核心动画命令。

【讨论】:

  • 那么你不能在运行时创建网格吗?例如,如果每一帧我都想修改一些顶点,我可以这样做吗? ——或者实例化?我喜欢 RealityKit 的主要方面是网络和对象同步,但我需要能够在程序中动态生成对象
  • 是的,你可以,但你必须让它成为一个 RealityKit 实体,而不仅仅是一个 ModelObject。网格/模型对象只是 RealityKit 实体的一个属性。
猜你喜欢
  • 2018-06-25
  • 2016-01-28
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 2015-11-12
相关资源
最近更新 更多