2016-12-21 12 views
0

내 SceneKit 프로젝트는 거대한 이미지가있는 노드가 하나만있는 가져온 .OBJ 파일을 사용합니다. 이미지는 다른 대상 또는 부품으로 구성됩니다. 나는 다리를 누르거나 특정 부분을 이미지화하고 강조 표시해야합니다. 이 코드는 내가 왼발 오른발 바닥 도청 될 필요와 같은 다른 부분과 3D 모델을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)   
} 

을 사용하고 파일 .OBJ 가져 오는 것입니다 그 (것)들에 다른 색깔을 보여주십시오. 문제는 이들 모두가 단일 노드에 있다는 것입니다.

+0

정말 노드가 하나 뿐이며 하위 노드가없는 것은 확실합니까? 여러 노드에 대해 하나의 이미지를 갖는 것이 일반적입니다. 노드 계층 구조를 다시 점검하십시오. 그렇지 않으면, Hal Mueller는 3D 모델링 소프트웨어로 돌아가서 하나의 메쉬를 여러 메쉬로 분할하는 것이 현명하다고 말합니다. –

+0

예 노드가 하나만 있는지 확인하십시오. Node는 HitTest 메서드를 사용하여 얻은 많은 Geometry 요소로 구성됩니다. 마지막으로 3D 모델의 각 부분을 얻었습니다. 이제는 기하학 요소 색상을 확산시키기 위해 재료를 어떻게 적용 할 수 있을까요? –

+0

'SCNGeometryElement' https://developer.apple.com/reference/scenekit/scngeometryelement에 대한 문서를 확인하십시오. 형상은 여러 재질에 해당하는 여러 요소로 구성됩니다. –

답변

0

SCNHitTestResult은 탭한 삼각형의 색인을 제공합니다. 그러나 당신은 여전히 ​​하나의 삼각형에서 "왼쪽 팔"이라는 인식에 이르는 논리를 연구해야합니다.

당신의 최선의 방법은 3D 모델링 소프트웨어로 되돌아 가서 객체를 작고 논리적 인 구성 요소로 분해하는 것입니다.

+0

HITTEST Array에서 반환 한 ElementIndex의 색상을 어떻게 음영 또는 확산시킬 수 있는지에 따라 객체를 인식하는 첫 번째 작업을 수행 했습니까? –

+0

사실, 그렇게 할 수는 없습니다. 물론 이론적으로는 모델링 도구가 재료를 삼각형에 할당하는 방법과 요소 인덱스를 할당하는 방법에 대한 깊은 지식이 필요합니다. 거기에 누군가가이 방법을 알고 있지만, 최선의 방법은 블렌더 나 Maya, 3ds Max 또는 Cheetah3D를 사용하여 .OBJ를 작은 구성 요소로 분해하는 것입니다. –

+0

선생님 실제로 저는 많은 SCHHITTESTRESULT 객체로 구성된 HitTest 메소드로 배열을 얻었습니다. 첫 번째로 가져온 geometryIndex 속성을 사용하여 3D 모델의 모든 부분을 1에서 36까지 반환했습니다. 이제 두통은 어떻게 다른 방식으로 적용 할 수 있습니까? 그 geometryIndex 부분에 색이 있습니까? –