SCNNode是什么
苹果文档原话:
SCNNode是场景图的结构元素,表示3D坐标空间中的位置和变换,可以将几何图元,灯光,相机或其他可显示内容附加到这个元素中。
SCNNode对象本身在包含它的场景被渲染时没有可见的内容 - 它只表示相对于其父节点的坐标空间变换(position,orientation和scale)。 要构建一个场景,可以使用节点层次来创建其结构,然后将灯光,摄像机和几何图形添加到节点以创建可见内容。
说白了,节点就是一个抽象的东东,看不见也摸不着,但是有着自己的坐标系和位置。它与场景(SCNView)、游戏元素(比如灯光,摄像机和几何图形)的关系是:游戏元素要呈现出来,不能直接添加到场景中,而是绑定到节点(SCNNode)上,再把节点添加到场景中,就能看到游戏元素了。
SCNNode作用:确定场景的结构
场景中的rootNode
对象定义了SceneKit呈现的世界坐标系,可以理解为App看到世界的第一印象,所在的位置。 此根节点的每个子节点都有自己的独立坐标系,并由它的子节点继承。 可以使用节点的位置,旋转和缩放属性属性(或直接使用其transform
属性)确定坐标系之间的转换。
可以使用节点和转换层次结构来以适合您应用程序需求的方式对场景内容进行建模。 例如,如果您的应用程序呈现太阳系的动画视图,则可以构建一个节点层次结构,以便将天体相对于彼此进行建模:每个行星可以是一个节点,其轨道和其在该轨道中的当前位置定义在 太阳的坐标系统。 行星节点定义了自己的坐标空间,对于指定行星的旋转和其卫星的轨道(每个卫星都是其行星的子节点)都是有用的。 有了这个场景层次结构,可以轻松地在场景中添加逼真的动画 - 动画化行星周围的月球的旋转和太阳周围的行星将结合动画,使月亮跟随星球
节点的附件定义视觉内容和行为
节点层次结构决定场景的空间和逻辑结构,而不是其可见内容。 通过将SCNGeometry
对象附加到节点,可以将2D和3D对象添加到场景中。 (反过来,几何图形也附加了决定其外观的SCNMaterial
对象。)要使用光影效果遮挡场景中的几何图形,需要添加带有SCNLight
对象的节点。 要控制渲染时出现场景的视点,需要添加具有附加SCNCamera
对象的节点。
要向SceneKit
内容添加基于物理学的行为和特殊效果,得使用其他类型的节点附件。 例如,一个SCNPhysicsBody对象为物理模拟定义了一个节点的特征,一个SCNPhysicsField
对象将力施加到该节点周围区域的物理实体中。 连接到节点的SCNParticleSystem
对象在节点定义的空间中渲染粒子效果,如火,雨或落叶。
为了提高性能,SceneKit
可以在多个节点之间共享附件。 例如,在包含许多相同汽车的赛车游戏中,场景图将包含许多节点 - 一个用于定位和动画每辆车 - 但是所有汽车节点将引用相同的几何对象。
ps:好玩的开源AR项目集合awesome-arkit