【发布时间】:2017-05-07 02:25:25
【问题描述】:
我的 SceneKit 项目使用了一个导入的 .OBJ 文件,该文件仅包含一个带有巨大图像的节点。图像包含不同的对象或部分。我需要点击一只脚或图像的特定部分,并将其突出显示。 这是导入 .obj 文件的代码
sceneView = SCNView(frame: self.view.frame)
self.view.addSubview(sceneView)
let scene = SCNScene(named: "OBJ.obj")!
print("\(scene.rootNode.childNodes.first?.geometry?.materials.count)")
sceneView.scene = scene
这里我使用的是点击手势识别器
// add a tap gesture recognizer
let doubleTapRecognizer = UITapGestureRecognizer(target: self, action : #selector(self.tapGesture(sender:)));
doubleTapRecognizer.numberOfTapsRequired = 1;
doubleTapRecognizer.numberOfTouchesRequired = 1;
sceneView.addGestureRecognizer(doubleTapRecognizer);
func tapGesture(sender: UITapGestureRecognizer){
let hitResult : SCNHitTestResult
// check what nodes are tapped
let p = sender.location(in: sceneView)
let hitResults = sceneView.hitTest(p, options: nil)
}
我有 3D 模型,其中需要轻敲左脚右脚和地板等不同部位并在它们上显示不同的颜色。问题是所有这些都在单个节点中。
【问题讨论】:
-
你确定它只是一个节点并且它没有任何子节点吗?多个节点通常有 1 个图像。再次检查您的节点层次结构。否则,正如 Hal Mueller 所说,回到 3D 建模软件并将一个网格拆分为多个网格是明智的。
-
是的,我确定只有一个节点。节点由我使用 HitTest 方法获得的许多几何元素组成。最后我得到了 3d 模型的每个部分。现在我面临的问题是如何将材质应用于漫射几何元素颜色?
-
查看
SCNGeometryElementdeveloper.apple.com/reference/scenekit/scngeometryelement 的文档。您的几何图形由多个元素组成,这些元素可以对应于多种材料。
标签: ios swift scenekit scene hittest