[SceneKit專題]1.Hello SceneKit

說明

本系列文章是對<3D Apple Games by Tutorials>一書的學(xué)習(xí)記錄和體會

此書對應(yīng)的代碼地址

SceneKit系列文章目錄

更多iOS相關(guān)知識查看github上WeekWeekUpProject

系列文章目錄

  1. Hello SceneKit

  2. physics物理效果

  3. Render Loop渲染循環(huán)

  4. Particle Systems粒子系統(tǒng)

  5. 3D空間的觸摸事件

  6. Scene Editor場景編輯器

  7. Cameras相機(jī)

  8. Lights燈光

  9. Basic Collision Detection碰撞檢測基礎(chǔ)

  10. Materials材質(zhì)

  11. Reference Nodes引用節(jié)點

  12. Shadows陰影

  13. Intermediate Collision Detection碰撞檢測中級

  14. Motion Control運動控制

  15. Transitions轉(zhuǎn)場

  16. Actions動作

  17. Audio音頻

  18. Mac常用3D工具

  19. MagicaVoxel的使用,3D體素網(wǎng)格建模

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

  21. 3D打磚塊游戲Breaker

  22. 3D平衡球游戲Marble Maze

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

  24. 體素風(fēng)格過馬路游戲Mr. Pig

  25. 如何制作一個像Can Knockdown的游戲

  26. 如何制作一個像Stack的游戲


Scenes:SCNScene

自帶一個定義了坐標(biāo)系的root node(根節(jié)點),使用scene gragh來組織場景,可以向內(nèi)部增加樹狀結(jié)構(gòu)的內(nèi)部節(jié)點(node),例如 lights光源, cameras相機(jī), geometry幾何體, particle emitters粒子發(fā)射源.
需要放到SCNView的實例中呈現(xiàn),SCNView在OSX(macOS)中是NSView的子類,在iOS中是UIView的子類;

左側(cè)樹狀結(jié)構(gòu)


QQ20170402-175546@2x.png

坐標(biāo)系,屏幕外是+Z方向,坐標(biāo)使用向量表示,示例SCNVector3(x: 0, y: 5, z: 10)


QQ20170402-180815@2x.png

Nodes:SCNNode

游戲中的每個元素都被稱為node(節(jié)點),存放在樹狀結(jié)構(gòu)scene gragh中,例如 lights光源, cameras相機(jī), geometry幾何體, particle emitters粒子發(fā)射源.每個scene graph中包含一個特殊的基礎(chǔ)節(jié)點:root node(根節(jié)點),可以把其他節(jié)點添加到節(jié)點下面,變成它的子節(jié)點.

添加到scene中的node,默認(rèn)在(x:0, y:0, z:0),即相對于父節(jié)點的位置.要想調(diào)整節(jié)點在父節(jié)點的位置,應(yīng)該調(diào)整local coordinates(本地坐標(biāo)系),而不是調(diào)整world coordinates(世界坐標(biāo)系).

注意
默認(rèn)情況下,如果一個場景中沒有任何改變時,Scene Kit會進(jìn)入"paused"(暫停)狀態(tài),為了防止這種情況,需要在創(chuàng)建SCNView實例時設(shè)置playing屬性為true如

scnView.playing = true

camera

攝像機(jī)的顯示范圍控制,小于zNear不顯示,大于zFar不顯示.添加到一個空節(jié)點的camera屬性里


QQ20170402-204457@2x.png
func setupCamera() {
  // 1.創(chuàng)建空的節(jié)點
  cameraNode = SCNNode()
  // 2.創(chuàng)建相機(jī),添加到節(jié)點中
  cameraNode.camera = SCNCamera()
  // 3.設(shè)置相機(jī)節(jié)點的位置
  cameraNode.position = SCNVector3(x: 0, y: 0, z: 10)
  // 4.添加到根節(jié)點中
  scnScene.rootNode.addChildNode(cameraNode)
}

primitives geometry(原生幾何體)

系統(tǒng)自帶了很多基礎(chǔ)的幾何體,添加到一個空節(jié)點的geometry屬性里
第一排從左起:cone(圓錐體), torus(圓環(huán)體), capsule(膠囊體), tube(管道)
第二排從左起:pyramid(四棱錐), box(長方體), sphere(球體), cylinder(圓柱體)

QQ20170402-211703@2x.png

SCNView內(nèi)置屬性

// 1.顯示統(tǒng)計數(shù)據(jù)
scnView.showsStatistics = true
// 2.打開相機(jī)控制
scnView.allowsCameraControl = true
// 3.自動啟用默認(rèn)光源
scnView.autoenablesDefaultLighting = true

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

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


QQ20170402-214534@2x.png
QQ20170402-215145@2x.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容