2017-08-16 19 views

答えて

1

その後、ViewController.mにこれらを追加し、SceneKitとのObj-CとXcodeで新しいARプロジェクトを作成します。

//as a class or global variable: 
NSMapTable *planes; 

//add to viewWillAppear: 
configuration.planeDetection = ARPlaneDetectionHorizontal; 

//to viewDidLoad: 
planes = [NSMapTable mapTableWithKeyOptions:NSMapTableStrongMemory 
           valueOptions:NSMapTableWeakMemory]; 

//new functions: 
- (void)renderer:(id<SCNSceneRenderer>)renderer didAddNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor { 
if([anchor isKindOfClass:[ARPlaneAnchor class]]){ 
    [planes setObject:anchor forKey:node]; 
    ARPlaneAnchor *pa = anchor; 

    SCNNode *pn = [SCNNode node]; 
    [node addChildNode:pn]; 
    pn.geometry = [SCNPlane planeWithWidth:pa.extent.x height:pa.extent.z]; 
    SCNMaterial *m = [SCNMaterial material]; 
    m.emission.contents = UIColor.blueColor; 
    m.transparency = 0.1; 
    pn.geometry.materials = @[m]; 
    pn.position = SCNVector3Make(pa.center.x, -0.002, pa.center.z); 
    pn.transform = SCNMatrix4MakeRotation(-M_PI/2.0, 1, 0, 0); 
    } 
} 

- (void)renderer:(id<SCNSceneRenderer>)renderer didUpdateNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor { 
if([anchor isKindOfClass:[ARPlaneAnchor class]]){ 
    [planes setObject:anchor forKey:node]; 

    ARPlaneAnchor *pa = anchor; 
    SCNNode *pn = [node childNodes][0]; 
    SCNPlane *pg = pn.geometry; 
    pg.width = pa.extent.x; 
    pg.height = pa.extent.z; 
    pn.position = SCNVector3Make(pa.center.x, -0.002, pa.center.z); 
    } 
} 

- (void)renderer:(id<SCNSceneRenderer>)renderer didRemoveNode:(nonnull SCNNode *)node forAnchor:(nonnull ARAnchor *)anchor{ 
[planes removeObjectForKey:node]; 
} 

あなたは半透明の平面を参照してくださいよ、あればm.emission.contentsに質感を与えますあなたはそう感じる。

はまたExample App from Apple in Swift

+0

パーフェクトを取得し、あなたに感謝! – JHarden13

関連する問題