4

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

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

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

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

4

2 回答 2

2

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

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

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

于 2015-12-31T20:54:44.203 回答
0

就像一个小的选择,你可以MapSCNNodeto ModelObject

于 2017-07-30T18:50:45.650 回答