-
轉載請註明出處:ARKit從入門到精通(5)-ARScnView介紹
-
AR視圖,在第一小節筆者介紹過,ARKit支持3D的AR場景和2D的AR場景,ARSCNView是3D的AR場景視圖
-
API介紹
@interface ARSCNView : SCNView
/**
代理
*/
@property (nonatomic, weak, nullable) id<ARSCNViewDelegate> delegate;
/**
AR會話
*/
@property (nonatomic, strong) ARSession *session;
/**
場景
*/
@property(nonatomic, strong) SCNScene *scene;
/**
是否自動適應燈光
*/
@property(nonatomic) BOOL automaticallyUpdatesLighting;
/**
返回對應節點的錨點,節點是一個3D虛擬物體,它的座標是虛擬場景中的座標,而錨點ARAnchor是ARKit中現實世界的座標。
*/
- (nullable ARAnchor *)anchorForNode:(SCNNode *)node;
/**
返回對應錨點的物體
*/
- (nullable SCNNode *)nodeForAnchor:(ARAnchor *)anchor;
/**
根據2D座標點搜索3D模型,這個方法通常用於,當我們在手機屏幕點擊某一個點的時候,可以捕捉到這一個點所在的3D模型的位置,至於爲什麼是一個數組非常好理解。手機屏幕一個是長方形,這是一個二維空間。而相機捕捉到的是一個由這個二維空間射出去的長方體,我們點擊屏幕一個點可以理解爲在這個長方體的邊緣射出一條線,這一條線上可能會有多個3D物體模型
point:2D座標點(手機屏幕某一點)
ARHitTestResultType:捕捉類型 點還是面
(NSArray<ARHitTestResult *> *):追蹤結果數組 詳情見本章節ARHitTestResult類介紹
數組的結果排序是由近到遠
*/
- (NSArray<ARHitTestResult *> *)hitTest:(CGPoint)point types:(ARHitTestResultType)types;
@end
//代理
#pragma mark - ARSCNViewDelegate
//代理的內部實現了SCNSceneRendererDelegate:scenekit代理 和ARSessionObserver:ARSession監聽(KVO機制)
@protocol ARSCNViewDelegate <SCNSceneRendererDelegate, ARSessionObserver>
@optional
/**
自定義節點的錨點
*/
- (nullable SCNNode *)renderer:(id <SCNSceneRenderer>)renderer nodeForAnchor:(ARAnchor *)anchor;
/**
當添加節點是會調用,我們可以通過這個代理方法得知我們添加一個虛擬物體到AR場景下的錨點(AR現實世界中的座標)
*/
- (void)renderer:(id <SCNSceneRenderer>)renderer didAddNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor;
/**
將要刷新節點
*/
- (void)renderer:(id <SCNSceneRenderer>)renderer willUpdateNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor;
/**
已經刷新節點
*/
- (void)renderer:(id <SCNSceneRenderer>)renderer didUpdateNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor;
/**
移除節點
*/
- (void)renderer:(id <SCNSceneRenderer>)renderer didRemoveNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor;
@end