ARKit

ARKit.png

SceneKit是渲染3D庫。
SCNView是3D世界和UIView的橋接器。
SCNScene是管理3D中所有的節(jié)點。
SCNNode是3D中每個節(jié)點的對象基類。
SCNPhysicaBody是每個對象增加現(xiàn)實屬性。
SCNGeometry是每個對象的形狀。
SCNMaterial是表面紋理。
SCNCameraController是Scene中攝像機操作類。但是一般不用,自己創(chuàng)建一個攝像機Node。

ARKit通過攝像頭和陀螺儀來采集數據來自動改變攝像機坐標和視野。

坐標系.png

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的內容與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 ; 


根據會話配置,ARKit會自動將ARAnchor對象添加到ARSession中,例如:平面檢測得到的ARAnchor對象
renderer:nodeForAnchor:方法返回nil,則不會有SCNNode添加到場景中。如果該方法沒有實現(xiàn),ARKit將創(chuàng)建一個空的SCNNode對象,可以通過實現(xiàn)renderer:didAddNode:forAnchor:為該節(jié)點添加內容

手動通過addAnchor:添加ARAnchor對象時,ARKit會自動調用renderer:nodeForAnchor:或renderer:didAddNode:forAnchor:

ARSKViewDelegate

實施該協(xié)議的方法來將SpriteKit內容與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 ; 


根據會話配置,ARKit會自動將ARAnchor對象添加到ARSession中,例如:平面檢測得到的ARAnchor對象
若view:nodeForAnchor:沒有實現(xiàn),ARKit將創(chuàng)建一個空的SKNode對象,可以通過實現(xiàn)view:didAddNode:forAnchor:為該節(jié)點添加內容

ARKit對于2D和3D模型都會進行3D效果控制,如node的位置,旋轉和縮放。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容