說明
本系列文章是對<3D Apple Games by Tutorials>一書的學習記錄和體會,完整版請購買正版書籍
更多iOS相關知識檢視github上WeekWeekUpProject
系列文章目錄
Scenes:SCNScene
自帶一個定義了座標系的root node(根節點),使用scene gragh來組織場景,可以向內部增加樹狀結構的內部節點(node),例如 lights光源, cameras相機, geometry幾何體, particle emitters粒子發射源. 需要放到SCNView的例項中呈現,SCNView在OSX(macOS)中是NSView的子類,在iOS中是UIView的子類;
左側樹狀結構
座標系,螢幕外是+Z方向,座標使用向量表示,示例SCNVector3(x: 0, y: 5, z: 10)
Nodes:SCNNode
遊戲中的每個元素都被稱為node(節點),存放在樹狀結構scene gragh中,例如 lights光源, cameras相機, geometry幾何體, particle emitters粒子發射源.每個scene graph中包含一個特殊的基礎節點:root node(根節點),可以把其他節點新增到節點下面,變成它的子節點.
新增到scene中的node,預設在(x:0, y:0, z:0),即相對於父節點的位置.要想調整節點在父節點的位置,應該調整local coordinates(本地座標系),而不是調整world coordinates(世界座標系).
注意 預設情況下,如果一個場景中沒有任何改變時,Scene Kit會進入"paused"(暫停)狀態,為了防止這種情況,需要在建立SCNView例項時設定playing屬性為true如
scnView.playing = true
複製程式碼
camera
攝像機的顯示範圍控制,小於zNear不顯示,大於zFar不顯示.新增到一個空節點的camera屬性裡
func setupCamera() {
// 1.建立空的節點
cameraNode = SCNNode()
// 2.建立相機,新增到節點中
cameraNode.camera = SCNCamera()
// 3.設定相機節點的位置
cameraNode.position = SCNVector3(x: 0, y: 0, z: 10)
// 4.新增到根節點中
scnScene.rootNode.addChildNode(cameraNode)
}
複製程式碼
primitives geometry(原生幾何體)
系統自帶了很多基礎的幾何體,新增到一個空節點的geometry屬性裡 第一排從左起:cone(圓錐體), torus(圓環體), capsule(膠囊體), tube(管道) 第二排從左起:pyramid(四稜錐), box(長方體), sphere(球體), cylinder(圓柱體)
SCNView內建屬性
// 1.顯示統計資料
scnView.showsStatistics = true
// 2.開啟相機控制
scnView.allowsCameraControl = true
// 3.自動啟用預設光源
scnView.autoenablesDefaultLighting = true
複製程式碼
1.showsStatistics在底部顯示一個實時的統計條,左側+號點選可展開;
2.allowsCameraControl允許使用簡單手勢控制相機
-單指滑動:旋轉相機;
-雙指滑動:移動相機;
-雙指捏合:縮放;
-雙擊:如果有兩個相機則切換,一個相機則返回原始狀態;
3.autoenablesDefaultLighting建立一個通用的全方向光源;
fps:幀率,每秒渲染的畫面數
◆:每幀畫面渲染的總物體數,多光源照射同一物體時會渲染多次
▲:每幀畫面渲染的多邊形總數量
✸:可見的光源總數(影響物體的光源), Scene Kit推薦不要同時使用3個以上光源