2016-12-21 22 views
0

私のSceneKitプロジェクトは、インポートされた.OBJファイルを使用します。このファイルには、巨大なイメージを持つノードが1つだけ含まれています。イメージは、異なるオブジェクトまたはパーツで構成されます。私は足をタップするか、特定の部分をイメージし、それを強調表示する必要があります。 これは私が盗聴されるために必要な左足右足や床などのさまざまな部分で3Dモデルを持っている私は、タップジェスチャー認識にSceneKit NSNode分割部分

// 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ファイル

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 

、ここをインポートするためのコードですそれらに異なる色を表示します。問題は、これらすべてが単一ノードにあることです。

+0

あなたはそれが単なるノードであり、子どもがいないことは確かですか?複数のノードに対して1つのイメージを持つことは一般的です。ノード階層を再度確認してください。それ以外の場合、Hal Mueller氏は、3Dモデリングソフトウェアに戻ってそのメッシュを複数のメッシュに分割するのが賢明だと述べています。 –

+0

はい、ノードが1つしかありません。ノードは、HitTestメソッドを使用して取得した多くのジオメトリ要素で構成されています。最後に、3Dモデルの各部分を得ました。今私はどのように材料を拡散してジオメトリ要素の色を適用することができるのかという問題に直面していますか? –

+0

「SCNGeometryElement」https://developer.apple.com/reference/scenekit/scngeometryelementのドキュメントをチェックしてください。ジオメトリは、複数の要素に対応する複数の要素で構成されています。 –

答えて

0

SCNHitTestResultは、タップされた三角形のインデックスを表示します。しかし、あなたはまだ、単一の三角形から "それは左腕である"と認識するまでの論理を解明する必要があります。

私はあなたの3Dモデリングソフトウェアに戻ってオブジェクトをより小さく、論理的な要素に分解することをお勧めします。

+0

私は、HITTEST Arrayによって返されたElementIndexの色をどのようにシェードまたは拡散させることができるかによってオブジェクトを認識する最初のタスクを実行しましたか? –

+0

効果的に、することはできません。理論的にはもちろんですが、モデリングツールがマテリアルを三角形に割り当てる方法や要素インデックスの割り当て方法について深く知っておく必要があります。私はそこに誰かがこれを行う方法を知っている誰かがいると確信していますが、あなたの最善の策は、小さな部品にあなたの.OBJを壊すためにブレンダーやMayaや3ds MaxやCheetah3Dを使うことです。 –

+0

実際に私はHitTestメソッドを使って配列を取得しました。これは多くのSCHHITTESTRESULTオブジェクトで構成されています。最初に取得したプロパティーgeometryIndexを使用して、3Dモデルのすべての部分を1から36まで戻しました。そのgeometryIndex部分の色? –

関連する問題