參考博文 : ARKit從入門(mén)到精通(1)-ARKit初體驗(yàn)
看完算是個(gè)初步認(rèn)識(shí)吧, 知道如何使用.好多細(xì)節(jié)好需要研究
// 總結(jié) : 這個(gè)Demo
// 1.ARSCNView 負(fù)責(zé)展示AR內(nèi)容
// 2.ARSession 負(fù)責(zé)管理AR事務(wù)
// 3.ARSessionConfiguration 負(fù)責(zé)處理現(xiàn)實(shí)世界內(nèi)容跟蹤
// 4.SCNNode 負(fù)責(zé)創(chuàng)建節(jié)點(diǎn)(模型)
// 5.SCNScene 負(fù)責(zé)描述3D場(chǎng)景(裝模型的容器)
理解細(xì)節(jié)點(diǎn):
- 最開(kāi)始接觸的時(shí)候,會(huì)考慮怎么將模型展示到屏幕上,實(shí)現(xiàn)AR顯示,你可能在屏幕上各種點(diǎn)擊,想著在我的桌面上,地板上,半空中展示出來(lái),但是,ARKit內(nèi)部是自動(dòng)去實(shí)現(xiàn)算法處理,然后呢,才在屏幕上顯示你編程出來(lái)的內(nèi)容.簡(jiǎn)單粗暴來(lái)說(shuō),不穩(wěn)定,暫時(shí)不能做到很精準(zhǔn)的將模型投放到某一個(gè)位置.最終你可能還是實(shí)現(xiàn)出來(lái)了,但是位置有偏差.
PS : 在ARKit內(nèi)部計(jì)算完,符合要求后會(huì)調(diào)用這個(gè)方法.(官方解釋有點(diǎn)難以理解什么時(shí)候調(diào)用)
- (void)renderer:(id <SCNSceneRenderer>)renderer
didAddNode:(SCNNode *)node
forAnchor:(ARAnchor *)anchor;
使用ARKit調(diào)用兩個(gè)框架
#import <SceneKit/SceneKit.h> //理解 : 一個(gè)供AR實(shí)現(xiàn)內(nèi)容的平臺(tái)
#import <ARKit/ARKit.h> //理解 : 一個(gè)實(shí)現(xiàn)AR內(nèi)容的框架
一些基礎(chǔ)的內(nèi)容
//AR視圖:展示3D界面
@property(nonatomic,strong)ARSCNView *arSCNView;
//AR會(huì)話台舱,負(fù)責(zé)管理相機(jī)追蹤配置及3D相機(jī)坐標(biāo)
@property(nonatomic,strong)ARSession *arSession;
//會(huì)話追蹤配置:負(fù)責(zé)追蹤相機(jī)的運(yùn)動(dòng)
@property(nonatomic,strong)ARSessionConfiguration *arSessionConfiguration;
//節(jié)點(diǎn) : 具體內(nèi)容
@property(nonatomic,strong)SCNNode *planeNode;
應(yīng)該還有一個(gè)是
@property(nonatomic,strong)SCNScene *Scene;
這個(gè)是什么呢?怎么理解呢???
簡(jiǎn)單粗暴的理解:
如果你做過(guò)自定義的Xib的話,比如自定義Cell,加載Xib的時(shí)候,會(huì)取整個(gè)Xib文件中的Cell組件. 對(duì)于整個(gè)Xib來(lái)說(shuō),就只有那么一個(gè)完整得Cell的組件.也就是這個(gè)Cell. (當(dāng)然你也可以自定義兩個(gè),也是可行的,取對(duì)應(yīng)的那一個(gè)就好,不過(guò)就是自己給自己找麻煩). 就是一個(gè)單獨(dú)空間中,我只有這么一個(gè)東西. 就是一瓶純凈水中只有水這一樣?xùn)|西一樣意思. 這里面是加載一個(gè)SCN資源文件.
同時(shí)也可以加載DAE文件.你可以訪問(wèn)這個(gè)地址TurboSquid, 在里面也可以找到相當(dāng)多的免費(fèi)的3D模型.DAE文件資源 :
這里面把蘋(píng)果系統(tǒng)Demo的飛機(jī)換成這個(gè)就可以了就可以了.其實(shí)是一樣的.
獲取模型代碼的實(shí)現(xiàn)
SCNScene *scene = [SCNScene sceneNamed:@"Models.scnassets/ship.scn"];
SCNNode *shipNode = scene.rootNode.childNodes[0];
//將模型添加到當(dāng)前屏幕中
[self.arSCNView.scene.rootNode addChildNode:shipNode];
設(shè)置模型的位置大小
shipNode.position = SCNVector3Make(x, y, z) ;
原始位置 :
z軸-10(米)的位置 :
文章最后:
后續(xù)要研究的內(nèi)容
關(guān)于SCNNode的細(xì)節(jié)處理也是值得去考慮的?比如,位置,大小,紋理等等.
AR交互怎么實(shí)現(xiàn)的?