我有一个包含我的身体模型的Scenekit文件。我在我的主要scenekit文件中使用它。当我单击诸如手,脚,手臂,头等身体部位时,我想打开不同的场景。主体是具有多个几何元素的单个节点。当我点击时,它可以正确检测分配给该几何体的材质,但不会显示它是哪个几何体元素,它显示的名称类似于body-splitcontainer-split4。因此,我需要获取几何元素。我正在制作3D视图应用。
我通过分别打印节点本身,名称和属性来检查它。它还不会检测几何元素。当我使用geometryindex属性时,它返回0。
@objc func handleTap(_手势识别:UIGestureRecognizer){ //检索SCNView
let scnView = self.view as! SCNView
// check what nodes are tapped
let p = gestureRecognize.location(in: scnView)
print(p)
let hitResults = scnView.hitTest(p, options: nil)
// check that we clicked on at least one object
if hitResults.count > 0 {
// retrieved the first clicked object
let result = hitResults[0]
// get the tapped node
let index = result.node
// Print the node name and geometry name
let material = result.node.geometry?.firstMaterial
print("Index is \(index.name)")
print("Material is \(material?.name)")
// highlight it
SCNTransaction.begin()
SCNTransaction.animationDuration = 0.5
// on completion - unhighlight
SCNTransaction.completionBlock = {
SCNTransaction.begin()
SCNTransaction.animationDuration = 0.5
material!.emission.contents = UIColor.black
SCNTransaction.commit()
}
material!.emission.contents = UIColor.yellow
SCNTransaction.commit()
}
}
我希望它能向我显示实际的几何元素名称,例如: body-Element0(用于头部) body-Element1(用于颈部) 但它向我展示 身体分裂容器分裂1 身体分裂容器分裂2 身体分裂容器分裂3 当我单击头部的不同部分时,所有这些都用于头部。 虽然显示正确的材料名称。 对于其手臂 身体分裂容器分裂22 等
答案 0 :(得分:0)
我明白了。在刺激器中,我的材料已被选中,但未获取我的几何元素。但是,当我在实际设备中对其进行测试时,代码更合理了,它在检测我的几何元素,但返回了编码的第一个材料。因此,我制作了一个字典,并使用该字典将几何元素与其材料名称相关联,作为geometry.firstmaterial
的解决方法