[SceneKit專題]1-Hello-SceneKit

蘋果API搬運工發表於2017-12-25

說明

本系列文章是對<3D Apple Games by Tutorials>一書的學習記錄和體會,完整版請購買正版書籍

此書對應的程式碼地址

SceneKit系列文章目錄

更多iOS相關知識檢視github上WeekWeekUpProject

系列文章目錄

  1. Hello SceneKit

  2. physics物理效果

  3. Render Loop渲染迴圈

  4. Particle Systems粒子系統

  5. 3D空間的觸控事件

  6. Scene Editor場景編輯器

  7. Cameras相機

  8. Lights燈光

  9. Basic Collision Detection碰撞檢測基礎

  10. Materials材質

  11. Reference Nodes引用節點

  12. Shadows陰影

  13. Intermediate Collision Detection碰撞檢測中級

  14. Motion Control運動控制

  15. Transitions轉場

  16. Actions動作

  17. Audio音訊

  18. Mac常用3D工具

  19. MagicaVoxel的使用,3D體素網格建模

  20. 仿水果忍者小遊戲Geometry Fighter

  21. 3D打磚塊遊戲Breaker

  22. 3D平衡球遊戲Marble Maze

  23. 跨平臺遊戲(macOS,tvOS,watchOS)

  24. 體素風格過馬路遊戲Mr. Pig

  25. 如何製作一個像Can Knockdown的遊戲

  26. 如何製作一個像Stack的遊戲


Scenes:SCNScene

自帶一個定義了座標系的root node(根節點),使用scene gragh來組織場景,可以向內部增加樹狀結構的內部節點(node),例如 lights光源, cameras相機, geometry幾何體, particle emitters粒子發射源. 需要放到SCNView的例項中呈現,SCNView在OSX(macOS)中是NSView的子類,在iOS中是UIView的子類;

左側樹狀結構

QQ20170402-175546@2x.png

座標系,螢幕外是+Z方向,座標使用向量表示,示例SCNVector3(x: 0, y: 5, z: 10)

QQ20170402-180815@2x.png

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屬性裡

QQ20170402-204457@2x.png

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(圓柱體)

QQ20170402-211703@2x.png

SCNView內建屬性

// 1.顯示統計資料
scnView.showsStatistics = true
// 2.開啟相機控制
scnView.allowsCameraControl = true
// 3.自動啟用預設光源
scnView.autoenablesDefaultLighting = true
複製程式碼

1.showsStatistics在底部顯示一個實時的統計條,左側+號點選可展開;
2.allowsCameraControl允許使用簡單手勢控制相機
-單指滑動:旋轉相機;
-雙指滑動:移動相機;
-雙指捏合:縮放;
-雙擊:如果有兩個相機則切換,一個相機則返回原始狀態;
3.autoenablesDefaultLighting建立一個通用的全方向光源;

fps:幀率,每秒渲染的畫面數
◆:每幀畫面渲染的總物體數,多光源照射同一物體時會渲染多次
▲:每幀畫面渲染的多邊形總數量
✸:可見的光源總數(影響物體的光源), Scene Kit推薦不要同時使用3個以上光源

QQ20170402-214534@2x.png

QQ20170402-215145@2x.png

相關文章