【问题标题】:SceneKit: Associating Nodes with Model ObjectsSceneKit:将节点与模型对象相关联
【发布时间】:2016-04-05 12:49:24
【问题描述】:

我需要将 SceneKit 节点对象与程序中的任意对象相关联,并且正在寻找最佳解决方案。

这是我的意思的一个例子: 假设我有一个程序可以使用 SceneKit 渲染分子中的原子。我有类 MoleculeAtom 来模拟我的数据。然后我使用 SceneKit 渲染分子。 当我在场景视图中单击球体节点时,我需要知道该球体代表哪个Atom 对象(Molecule 包含Atoms 的数组)

我可以创建一个将Node 映射到Atom 对象的字典,但想知道是否有办法将Atom 对象引用添加到球体节点。应该使用键值绑定吗?

我对 Cocoa 编程非常陌生,我正在寻找一种正确的方法。然后我可以研究实现细节。

【问题讨论】:

    标签: scenekit scnnode


    【解决方案1】:

    从几个不同的SCNNode 子类开始怎么样?第一个用于您的原子,第二个用于您的分子。每个 MoleculeNode 都有一个或多个 AtomNodes 作为子节点。 AtomNode 和 MoleculeNode 对它们所代表的 Atom 或 Molecule 有弱引用。

    现在您可以轻松移动或旋转一个 MoleculeNode,所有的 AtomNode 都会随之移动。每个 AtomNode 的几何形状都将保持固定,相对于父 MoleculeNode。

    命中测试将返回 AtomNodes 和 MoleculeNodes。如果需要,您可以通过节点的类或通过将节点的name 设置为“Atom”或“Molecule”来过滤该结果。如果您想对所需的点击精度保持宽松,SCNHitTestBoundingBoxOnlyKey 可能会很有用。

    【讨论】:

    • 感谢 Hal 花时间阅读和回复。坦率地说,我有点尴尬,因为我没有想到这种方法。由于我使用函数式编程方法编写这个程序,首先编写了我的模型类,并且是 SceneKit/Cocoa/Mac/iOS 编程的新手,所以这一切都对我不利。我想我只需要“回归基础”并通过使用基本的 OOP 来思考这一点。我一定会遵循您提出的方法。
    【解决方案2】:

    作为一个小的替代方案,您可以将MapSCNNode 转换为ModelObject

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-10
      • 2014-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多