[SceneKit专题]1-Hello-SceneKit

12,746 阅读3分钟

说明

本系列文章是对<3D Apple Games by Tutorials>一书的学习记录和体会,完整版请购买正版书籍

Raywenderlich 在2021年公开了一批过期书籍(包含《ARKit by Tutorials》)及配套代码

SceneKit系列文章目录

系列文章目录

  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