SceneKit开发教程02 | SCNScene和SCNView

本文主要讲解 SCNScene 和 SCNView 相关内容。

0. 写在前面

本文结构如下:

本文结构图

1. SCNScene

开始之前,需要做一个名词的中英文对照。

  • scene :场景
  • node:节点
  • view:视图

SCNScene对象表示三维场景及其内容。节点组成的层级结构(树形结构)构成整个场景的骨架,相机、灯光、几何体等“内容”附着在节点上,这些节点以及附着在节点上属性,构成了一个可见的3D场景。

场景通过SCNViewSCNLayer(仅限macOS)或 SCNRenderer来展示,这几个展示类都遵循SCNSceneRenderer协议,该协议定义这些类共享的属性和方法。

SCNScene类还提供读写场景文件的界面。

1.1 从场景文件中读取场景

一般,可以使用一些软件,比如3Dsmax、maya,来制作3D场景,然后将这些场景文件导入到项目中来。

SceneKit提供了如下API来加载场景文件:

SceneKit 还提供了一个API,从Model I/O资源中加载场景:

Model I/O此处不做展开讲述,你知道有这种方法即可。

.scnassets文件夹。

回忆我们之前创建的空AR项目,里面都会有个art.scnassets。


image.png

文件夹里存放场景资源(示例中的ship.scn)和纹理资源(示例中的texture.png),Xcode会优化这些资源,以便在每个设备上获得最佳性能,比如说应用瘦身和按需加载资源。

这部分内容,我在《SceneKit | 加载 3D模型(obj/scn/dae)到你的AR项目中》中,有demo演示!

1.2 用代码的方式创建场景

SceneKit 提供了创建场景的类方法:

调用这个方法可以创建一个空场景,这个空场景只包含一个“不包含任何内容的 root 节点”,可以通过在root节点上添加子节点的方式,来创建一个场景。

1.3 保存场景到文件中

这个功能是很重要的,比如,我们团队另外一位同事最近在做的一件事儿就是,将 ARKit 输出 含有深度数据的ARFaceGeometry人脸从iPhone X中导出来,然后利用3D打印设备打印人脸。我下面介绍的方法就是导出人脸的其中一种方式。

开始本小节之前,科普一下两种文件格式:

  • .scn 文件,是SceneKit的 原生格式,这种格式的场景文件支持所有的SceneKit特性,诸如物理效果、约束以及粒子系统,并且,按照这种格式来导入场景文件,速度是最快的;
  • .dae 文件,dae是Digital Asset Exchange 的缩写,这种格式的场景文件不支持SceneKit特性,诸如物理效果、约束以及粒子系统

SceneKit 提供了 保存场景方法:

改方法可以将SceneKit的场景写入到文件中,文件的格式由操作系统你指定的文件后缀来决定:

  • 在 iOS 10.0, tvOS 10.0, watchOS 3.0, OS X v10.11,以及更高的版本里,指定.scn为文件后缀,可以按照SceneKit原生格式保存文件;
  • 在macOS上,可以指定.dae为文件后缀,将场景保存为dae文件;
  • 在一些不支持上面write方法的低版本系统里,可以通过NSKeyedArchiver将场景序列化为scn文件。

1.4 更多API

上面讲述了一些高频使用的API,SCNScene更多的API可以自行前往开发者文档查询。

2. SCNView

SCNView继承自UIView,用来展示SceneKit 3D内容。

2.1 实例化 SCNView && 指定显示场景

系统提供了如下init方法:

通过设置 scene 属性,在view上显示指定的场景。

2.2 在视图的场景中播放动作和动画

SCNView 提供了三个方法,来管理当前场景中的动画:

2.3 捕获场景快照

SCNView 提供了一个快照当前场景的方法,可以将当前的场景渲染到新的图像对象上:

下一篇《iOS 11 SceneKit开发教程03 | 使用SCNNode && SCNReferenceNode定义场景结构》,会介绍SCNNode和SCNReferenceNode相关内容。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容