簡體   English   中英

SceneKit 節點的交集

[英]SceneKit intersection of nodes

我在 SceneKit 中計算 2 個節點的交集時遇到問題。 對象就像球體和更厚的平面(更復雜的多邊形)。 設置:帶有 2 個可以移動的不規則物體的簡單場景。 我嘗試了幾件事,例如:

  • 物理實體的交集(使用ShapeType.convexNull顯示一些東西,但即使對象不接觸也有連接點ShapeType.concavePolyhedron不顯示任何東西。
  • 命中測試:我有一個想法以某種方式計算隨機向量(很多),這些向量將通過兩個對象 go 並檢查共同的命中點。 它不起作用 - 顯示無效點。 這可能與物體四處移動和縮放的事實有關,但這里也沒有運氣。

我使用的示例代碼:

let root = SCNScene()
        let n1 = SCNNode()
        let n2 = SCNNode()
        
        root.rootNode.addChildNode(n1)
        root.rootNode.addChildNode(n2)
        
        // try1
        let options = [SCNPhysicsShape.Option.type: SCNPhysicsShape.ShapeType.convexHull]
        n1.physicsBody = SCNPhysicsBody(type: .kinematic, shape: SCNPhysicsShape(node: n1, options: options))
        n2.physicsBody = SCNPhysicsBody(type: .kinematic, shape: SCNPhysicsShape(node: n2, options: options))
        n1.physicsBody?.isAffectedByGravity = false
        n2.physicsBody?.isAffectedByGravity = false
        
        let opt: [SCNPhysicsWorld.TestOption : Any] = [.searchMode: SCNHitTestSearchMode.all]
        let inter = root.physicsWorld.contactTestBetween(n1.physicsBody!, n2.physicsBody!, options: opt)
        
        //does not work as expected
     
        
        // trial 2
        
        let v1 = SCNVector3(0, 0, 0)
        let v2 = SCNVector3(0, 0, 50)

        let n1v1 = root.rootNode.convertVector(v1, to: n1)
        let n1v2 = root.rootNode.convertVector(v2, to: n1)
        let n2v1 = root.rootNode.convertVector(v1, to: n2)
        let n2v2 = root.rootNode.convertVector(v2, to: n2)
        
        let n1Hit = n1.hitTestWithSegment(
            from: n1v1,
            to: n1v2,
            options: nil)
        let n2Hit = n2.hitTestWithSegment(
            from: n2v1,
            to: n2v2,
            options: nil)

任何想法如何找到相交線/平面/點?

我會把它留給下一代:) 我找到了一個很好的框架來幫助計算網格的交集: https://github.com/nicklockwood/Euclid

它符合我的需求,因此問題已結束。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM