В моем проекте SceneKit используется импортированный файл .OBJ, который содержит только один узел с огромным изображением. Изображение содержит различные объекты или части. Мне нужно нажать на ногу или конкретную часть изображения и выделить ее. Это код импортировать .obj файлСцены SceneKit NSNode
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 изображение. Проверьте иерархию узлов еще раз. В противном случае, как говорит Хэл Мюллер, разумно вернуться к программному обеспечению для 3D-моделирования и просто разбить эту сетку на несколько сеток. –
Да, я уверен, что есть только один узел. Узел содержит множество элементов геометрии, которые я получил с помощью метода HitTest. Наконец, я получил каждую часть 3D-модели. Теперь я сталкиваюсь с проблемой, что как я могу применять материалы для диффузии цветов элементов геометрии? –
Ознакомьтесь с документацией для 'SCNGeometryElement' https://developer.apple.com/reference/scenekit/scngeometryelement. Ваша геометрия состоит из нескольких элементов, которые могут соответствовать нескольким материалам. –