2017-08-16 46 views

回答

1

在Xcode中創建與SceneKit和對象 - 一個新的AR項目,然後將這些到ViewController.m:

//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