SceneKit开发教程02 | SCNScene和SCNView
在我们开始之前,我们需要对一个名词进行汉语和英语的比较。
SCNScene对象代表一个3D场景及其内容。节点组成的层次结构(树形结构)构成了整个场景的骨架,摄像机、灯光、几何体等“内容”都附着在节点上。这些节点和附加到这些节点的属性构成了一个可见的3D场景。
场景由SCNView、SCNLayer(仅限macOS)或SCNRender显示。这些显示类都遵循SCNSceneRenderer协议,该协议定义了这些类共享的属性和方法。
SCNScene类还提供了一个用于读写场景文件的接口。
一般可以使用一些软件,比如3Dsmax、maya等制作3D场景,然后将这些场景文件导入到项目中。
SceneKit提供了以下API来加载场景文件:
SceneKit还提供了从模型I/O资源加载场景的API:
这里不涉及模型I/O,你只要知道有这样的方法就行了。
回想一下我们之前创建的空AR项目,里面总会有一个art.scnassets。
该文件夹包含场景资源(示例中的ship.scn)和纹理资源(示例中的texture.png),Xcode会优化这些资源以在每个设备上获得最佳性能,例如应用瘦身和按需加载资源。
在这部分,我有一个在SceneKit |加载3D模型(obj/scn/dae)到你的AR项目中的演示!
SceneKit提供了一个创建场景的类方法:
调用这个方法可以创建一个空场景,这个空场景只包含一个“没有任何内容的根节点”。可以通过向根节点添加子节点来创建场景。
这个功能很重要。比如我们团队的另一个同事最近在做的事情,就是从iPhone X上导出ARKit的带有深度数据的ARFaceGeometry人脸,然后用3D打印设备打印人脸。下面我介绍的方法就是导出人脸的方法之一。
SceneKit提供了一种保存场景的方法:
更改方法将SceneKit的场景写入文件,文件格式由操作系统和您指定的文件后缀决定:
上面介绍了一些高频使用的API,SCNScene中更多的API可以去开发者的文档中查询。
SCNView继承自UIView,用于显示SceneKit 3D的内容。
系统提供了以下初始化方法:
通过设置scene属性在视图上显示指定的场景。
SCNView提供了三种方法来管理当前场景中的动画:
SCNView提供了一种对当前场景进行快照的方法,该方法可以渲染到新的图像对象:
下期《iOS 11 SceneKit开发教程03 |使用SCN节点& amp;& ampSCNReferenceNode定义了SCNNode结构,将引入SCNReferenceNode和SCNReferenceNode。