hello ,大家好。最近接觸到AR項目,對于我來說,是一竅不通,現在開始學習,并開始記錄學習過程,以防止忘記(本是自學,如有不對,歡迎指正)。
廢話少說,直接來說說怎么開始學習吧。 學習主要掌握ARkit(現實環境場景),SceneKit(3d引擎),SpriteKit(2d引擎)三個類。我的學習思路是先SceneKit,在SpriteKit的學習,最后把他們放在ARkit(現實環境場景)中展示。那么ar項目就能基本完成了。
現在開始學習單獨學習SceneKit框架吧(使用xcode8.0以上)。先熟悉下SceneKit的三維坐標系:右手坐標系(笛卡爾坐標系)
了解下面這幾個非常重要的類:
SCNView?:類似UIView,用來顯示?SceneKit 的內容,定義了一些代理方法,可以用 addSubView 方法添加到UiView 中
SCNScene:SceneKit 內容的容器. 你可以從3D建模工具生成的.dae文件中加載一個場景,或者用代碼創建一個 ,然后把它顯示在視圖上
SCNNode:一個場景的基本構建塊,你可以把攝像機,燈光,幾何體附加到節點上
SCNGeometry:一個可以連接到一個節點的三維物體。一個幾何體(有時稱為模型或網格)只定義了一個可見物體的形狀。要定義對象的表面顏色圖案,你必需要給幾何體要附加材料。然后給材料貼圖,或者上色,這個幾何體表面才會有顏色,或者圖案。
你可以從3D建模工具生成的.dae文件中加載一個幾何體,也可以用代碼創建,SceneKit 提供了幾種常見幾何體,是SCNGeometry?的子類,比如長方體,球,圓柱球等等,后面我們會寫一個demo會把官方提供的幾何體給大家列出來,給大家一個直觀的感受。 當然我們也可以用三維坐標,法向量自定義幾何體,也可以講一個2D 圖案轉化成一個具有深度(厚度)的三維幾何體。后面應該專門有一篇會講到利用貝塞爾曲線將一個2D 圖案轉化成一個具有深度(厚度)的三維幾何體。
SCNMaterial:材質,由于在3D建模工具中呈現球形,所以也叫材質球。上色,貼圖全靠它。
SCNLight:光源可以附加到節點上,在渲染場景中提供著色
SCNCamera:虛擬攝像機可以附加到節點上,提供了一個場景的視圖。
以上需要學習的幾個重要類。接下來我將從實際項目中實踐展示怎么運用。
然后在導入模型。
沒有模型可以網上找找,或者創建一個AR模型然后直接把里面的模型拷出來
好了,一切準備工作完成。我們來實現吧。
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.初始化節點
????self.node = [SCNScene sceneNamed:@"art.scnassets/plane/ship.scn"].rootNode;
? ? [self.scnView.scene.rootNode addChildNode:self.node];
//設置虛擬攝像頭(后期會介紹)
? ? 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.旋轉節點
????SCNAction *customAction = [SCNAction rotateByX:0 y:1 z:0 duration:1];
? ? SCNAction *repeatAction = [SCNAction repeatActionForever:customAction];
? ? [self.node runAction:repeatAction];
基本效果出現了:會旋轉的飛機模型
總結:才開始學習SceneKit。先一步一步來吧。第一節就這樣基本實踐SceneKit。接下來將具體介紹SceneKit。