2017-09-05 4 views
0

与えられたSCNNodeは、ノードの座標系で指定されたポイントがそのノードのジオメトリに含まれているかどうかをどのように判断できますか?SCNNodeポイント内テスト

また、単純な場合は、ポイントがノードの境界ボックス内に含まれているかどうかをテストするにはどうすればよいですか?

答えて

0

これよりも良い答えがないと私は驚いていますが、私は見つけていないので、ここに私が持っているものがあります。

extension SCNNode { 
    func boundingBoxContains(point: SCNVector3, in node: SCNNode) -> Bool { 
    let localPoint = self.convertPosition(point, from: node) 
    return boundingBoxContains(point: localPoint) 
    } 

    func boundingBoxContains(point: SCNVector3) -> Bool { 
    return BoundingBox(self.boundingBox).contains(point) 
    } 
} 

struct BoundingBox { 
    let min: SCNVector3 
    let max: SCNVector3 

    init(_ boundTuple: (min: SCNVector3, max: SCNVector3)) { 
    min = boundTuple.min 
    max = boundTuple.max 
    } 

    func contains(_ point: SCNVector3) -> Bool { 
    let contains = 
    min.x <= point.x && 
    min.y <= point.y && 
    min.z <= point.z && 

    max.x > point.x && 
    max.y > point.y && 
    max.z > point.z 

    return contains 
    } 
} 
関連する問題