hello 掏觉,大家好。最近接觸到AR項目值漫,對于我來說澳腹,是一竅不通,現(xiàn)在開始學(xué)習(xí)杨何,并開始記錄學(xué)習(xí)過程酱塔,以防止忘記(本是自學(xué),如有不對危虱,歡迎指正)羊娃。
廢話少說,直接來說說怎么開始學(xué)習(xí)吧埃跷。 學(xué)習(xí)主要掌握ARkit(現(xiàn)實環(huán)境場景)蕊玷,SceneKit(3d引擎)芦瘾,SpriteKit(2d引擎)三個類。我的學(xué)習(xí)思路是先SceneKit,在SpriteKit的學(xué)習(xí)集畅,最后把他們放在ARkit(現(xiàn)實環(huán)境場景)中展示。那么ar項目就能基本完成了缅糟。
現(xiàn)在開始學(xué)習(xí)單獨學(xué)習(xí)SceneKit框架吧(使用xcode8.0以上)挺智。先熟悉下SceneKit的三維坐標(biāo)系:右手坐標(biāo)系(笛卡爾坐標(biāo)系)
了解下面這幾個非常重要的類:
SCNView?:類似UIView,用來顯示?SceneKit 的內(nèi)容窗宦,定義了一些代理方法赦颇,可以用 addSubView 方法添加到UiView 中
SCNScene:SceneKit 內(nèi)容的容器. 你可以從3D建模工具生成的.dae文件中加載一個場景,或者用代碼創(chuàng)建一個 赴涵,然后把它顯示在視圖上
SCNNode:一個場景的基本構(gòu)建塊媒怯,你可以把攝像機,燈光髓窜,幾何體附加到節(jié)點上
SCNGeometry:一個可以連接到一個節(jié)點的三維物體扇苞。一個幾何體(有時稱為模型或網(wǎng)格)只定義了一個可見物體的形狀。要定義對象的表面顏色圖案寄纵,你必需要給幾何體要附加材料鳖敷。然后給材料貼圖,或者上色程拭,這個幾何體表面才會有顏色定踱,或者圖案。
你可以從3D建模工具生成的.dae文件中加載一個幾何體恃鞋,也可以用代碼創(chuàng)建崖媚,SceneKit 提供了幾種常見幾何體,是SCNGeometry?的子類恤浪,比如長方體畅哑,球,圓柱球等等资锰,后面我們會寫一個demo會把官方提供的幾何體給大家列出來敢课,給大家一個直觀的感受。 當(dāng)然我們也可以用三維坐標(biāo)绷杜,法向量自定義幾何體直秆,也可以講一個2D 圖案轉(zhuǎn)化成一個具有深度(厚度)的三維幾何體。后面應(yīng)該專門有一篇會講到利用貝塞爾曲線將一個2D 圖案轉(zhuǎn)化成一個具有深度(厚度)的三維幾何體鞭盟。
SCNMaterial:材質(zhì)圾结,由于在3D建模工具中呈現(xiàn)球形,所以也叫材質(zhì)球齿诉。上色筝野,貼圖全靠它晌姚。
SCNLight:光源可以附加到節(jié)點上,在渲染場景中提供著色
SCNCamera:虛擬攝像機可以附加到節(jié)點上歇竟,提供了一個場景的視圖挥唠。
以上需要學(xué)習(xí)的幾個重要類。接下來我將從實際項目中實踐展示怎么運用焕议。
然后在導(dǎo)入模型宝磨。
沒有模型可以網(wǎng)上找找,或者創(chuàng)建一個AR模型然后直接把里面的模型拷出來
好了盅安,一切準(zhǔn)備工作完成唤锉。我們來實現(xiàn)吧。
1.初始化場景
? ?self.scnView = [[SCNView alloc]initWithFrame:self.view.frame];
? ?[self.view addSubview:self.scnView];
? ?self.scnView.backgroundColor = [UIColor blackColor];
? ?self.scnView.scene = [[SCNScene alloc]init];
簡單介紹下别瞭,SCNView是試圖窿祥,基于UIView。
2.初始化節(jié)點
????self.node = [SCNScene sceneNamed:@"art.scnassets/plane/ship.scn"].rootNode;
? ? [self.scnView.scene.rootNode addChildNode:self.node];
//設(shè)置虛擬攝像頭(后期會介紹)
? ? SCNNode *camersNode = [SCNNode node];
? ? camersNode.camera = [SCNCamera camera];
? ? [self.scnView.scene.rootNode addChildNode:camersNode];
? ? self.scnView.allowsCameraControl = YES;
? ? camersNode.position = SCNVector3Make(0, 0, 2);
3.旋轉(zhuǎn)節(jié)點
????SCNAction *customAction = [SCNAction rotateByX:0 y:1 z:0 duration:1];
? ? SCNAction *repeatAction = [SCNAction repeatActionForever:customAction];
? ? [self.node runAction:repeatAction];
基本效果出現(xiàn)了:會旋轉(zhuǎn)的飛機模型
總結(jié):才開始學(xué)習(xí)SceneKit蝙寨。先一步一步來吧晒衩。第一節(jié)就這樣基本實踐SceneKit。接下來將具體介紹SceneKit墙歪。