rendering - RealityKit 如何在运行时创建自定义网格?
问题描述
RealityKit 具有许多有用的功能,例如通过网络内置多用户同步以支持共享世界,但我似乎找不到太多关于在运行时创建网格/对象的文档。RealityKit 具有一些基本的网格生成功能(盒子、球体等),但我想在运行时创建自己的程序网格(顶点和索引),并可能在每一帧立即模式渲染样式中重新生成它们。
首先,有没有办法做到这一点,或者 RealityKit 是否过于封闭而无法进行大量自定义渲染?其次,是否有替代解决方案可以让我使用一些 RealityKit 的同步?例如,这部分真的只是我可以与 ARKit 3 一起使用的另一个库吗?这叫什么?我也希望能够在用户设备之间同步任意数据,因此内置系统也会有所帮助。
我无法真正对此进行测试,因为目前我没有任何可以支持测试版软件的设备。我正在尝试了解如果我确实获得了必要的硬件,我是否能够为我的程序做我想做的事情,但文档很少。
解决方案
据我所知RealityKit
,只能使用原语或usdz
文件作为模型。虽然您可以在设备上usdz
使用生成文件ModelIO
,但这对于您的用例来说是不可行的。
然而,同步是内置的,ARKit
尽管当您不使用RealityKit
.
- 在设备之间创建
MultipeerConnectivity
会话(这也是您需要做的事情RealityKit
) - 配置您的 ARSession 并设置在委托回调中使
isCollborationEnabled
您的会话输出。CollaborationData
session(_:didOutputCollaborationData:)
MultipeerConnectivity
使用您的会话发送此数据。- 当从其他用户接收数据时,使用将其集成到您的会话中
update(with:)
要在用户之间发送任意信息,您可以通过MultipeerConnectivity
独立发送它们ARKit
或使用 custom ARAnchors
,这是您处理位置数据时的首选选项,例如当用户将对象放置在特定位置时。
而不是直接添加对象(通过使用类似scene.rootNode.addChildNode()
的东西SceneKit
创建一个特殊的ARAnchor
子类,其中包含添加模型并将其添加到会话所需的所有信息。然后在rendered(_:didAdd:forAnchor:)
回调中添加对象。这具有更好地跟踪您的对象(因为您在该位置添加了一个锚点,表明ARKit
它应该记住该位置)并且您不需要为多用户体验做任何特殊的事情,因为ARKit
调用rendered(_:didAdd:forAnchor:)
手动添加锚点和自动添加锚点的方法,例如当它接收到协作数据时。
推荐阅读
- javascript - 如何使用请求获取 Javascript 页面的完整 HTML 内容?
- python - 如何检查一个元素是否在子列表中,然后打印子列表
- json - Flutter 仅从响应中打印一个值
- cassandra - CassandraCQLUnit 给出空会话
- laravel - Laravel 推送器监听私人事件:错误 403 页面被禁止
- python - 在 TensorFlow2 中结合来自不同“网络”的梯度
- javascript - 如何在整个 div 上进行搜索过滤
- django - 具有唯一值或 null 的 Django MongoDB 模型字段
- reactjs - 使用组件独立地传递一些值和一个处理程序
- typescript - 打字稿泛型 - 声称没有继承属性的子类之一?