ARKit從入門到精通(5)-ARScnView介紹

@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

發佈了102 篇原創文章 · 獲贊 143 · 訪問量 68萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章