SceneKit是渲染3D庫。
SCNView是3D世界和UIView的橋接器。
SCNScene是管理3D中所有的節(jié)點慷荔。
SCNNode是3D中每個節(jié)點的對象基類。
SCNPhysicaBody是每個對象增加現(xiàn)實屬性缠俺。
SCNGeometry是每個對象的形狀显晶。
SCNMaterial是表面紋理。
SCNCameraController是Scene中攝像機操作類壹士。但是一般不用磷雇,自己創(chuàng)建一個攝像機Node。
ARKit通過攝像頭和陀螺儀來采集數(shù)據(jù)來自動改變攝像機坐標和視野躏救。
ARKit攝像機默認位置是坐標原點唯笙,注意設置Node的坐標。
ARKit攝像機是手機攝像頭無法代碼控制,這部分功能蘋果暫未開放崩掘。
ARSessionDelegate
實現(xiàn)ARSessionDelegate中的方法可以接收到相機捕捉到的視頻幀圖像以及ARSession的狀態(tài)
//提供新捕獲的攝像機圖像和相關的AR信息
- ( void ) session: ( ARSession * ) session didUpdateFrame: ( ARFrame * ) frame ;
//告訴委托對象錨點已被添加到session中
- ( void ) session: ( ARSession * ) session didAddAnchors: ( NSArray < ARAnchor *> * ) anchors ;
//session已更新錨點的屬性七嫌。
- ( void ) session: ( ARSession * ) session didUpdateAnchors: ( NSArray < ARAnchor *> * ) anchors ;
//從session中移除錨點
- ( void ) session: ( ARSession * ) session didRemoveAnchors: ( NSArray < ARAnchor *> * ) anchors ;
ARSCNViewDelegate
實現(xiàn)該委托的方法來將SceneKit的內(nèi)容與ARSession進行自動同步
//要求委托對象提供與ARAnchor對象對應的SCNNode對象
- ( SCNNode * ) renderer: ( id < SCNSceneRenderer > ) renderer nodeForAnchor: ( ARAnchor * ) anchor ;
//新的ARAnchor對象相對應的SCNNode對象已被添加到場景中
- ( void ) renderer: ( id < SCNSceneRenderer > ) renderer didAddNode: ( SCNNode * ) node forAnchor: ( ARAnchor * ) anchor ;
//將要更新ARAnchor對象對應的SCNNode對象的屬性
- ( void ) renderer: ( id < SCNSceneRenderer > ) renderer willUpdateNode: ( SCNNode * ) node forAnchor: ( ARAnchor * ) anchor ;
//已更新ARAnchor對象對應的SCNNode對象的屬性。
- ( void ) renderer: ( id < SCNSceneRenderer > ) renderer didUpdateNode: ( SCNNode * ) node forAnchor: ( ARAnchor * ) anchor ;
//從場景中移除與ARAnchor對象對應的SCNNode對象呢堰。
- ( void ) renderer: ( id < SCNSceneRenderer > ) renderer didRemoveNode: ( SCNNode * ) node forAnchor: ( ARAnchor * ) anchor ;
注
根據(jù)會話配置抄瑟,ARKit會自動將ARAnchor對象添加到ARSession中,例如:平面檢測得到的ARAnchor對象
renderer:nodeForAnchor:方法返回nil枉疼,則不會有SCNNode添加到場景中皮假。如果該方法沒有實現(xiàn),ARKit將創(chuàng)建一個空的SCNNode對象骂维,可以通過實現(xiàn)renderer:didAddNode:forAnchor:為該節(jié)點添加內(nèi)容
手動通過addAnchor:添加ARAnchor對象時惹资,ARKit會自動調(diào)用renderer:nodeForAnchor:或renderer:didAddNode:forAnchor:
ARSKViewDelegate
實施該協(xié)議的方法來將SpriteKit內(nèi)容與AR會話的自動同步。
//要求委托對象提供與ARAnchor對象對應的SKNode對象
- ( SKNode * ) view: ( ARSKView * ) view nodeForAnchor: ( ARAnchor * ) anchor ;
//與新的ARAnchor相對應的SKNode已被添加到場景中航闺。
- ( void ) view: ( ARSKView * ) view didAddNode: ( SKNode * ) node forAnchor: ( ARAnchor * ) anchor ;
//將要更新ARAnchor對應的SKNode對象
- ( void ) view: ( ARSKView * ) view willUpdateNode: ( SKNode * ) node forAnchor: ( ARAnchor * ) anchor ;
//已更新ARAnchor對應的SKNode對象
- ( void ) view: ( ARSKView * ) view didUpdateNode: ( SKNode * ) node forAnchor: ( ARAnchor * ) anchor ;
//從場景中移除與ARAnchor對象對應的SKNode褪测。
- ( void ) view: ( ARSKView * ) view didRemoveNode: ( SKNode * ) node forAnchor: ( ARAnchor * ) anchor ;
注
根據(jù)會話配置,ARKit會自動將ARAnchor對象添加到ARSession中潦刃,例如:平面檢測得到的ARAnchor對象
若view:nodeForAnchor:沒有實現(xiàn)侮措,ARKit將創(chuàng)建一個空的SKNode對象,可以通過實現(xiàn)view:didAddNode:forAnchor:為該節(jié)點添加內(nèi)容
ARKit對于2D和3D模型都會進行3D效果控制乖杠,如node的位置分扎,旋轉(zhuǎn)和縮放。