3D 在iOS APP 上展示

对于iOS开发者来说,想进行3D内容视觉展示开发工具有Metal、OpenGL ES 、SceneKit, Untiy3D
Untiy3D 介绍

不作为本次分享重点 原因:1. 集成很麻烦 2. 集成到项目中有点重
如果想要了解 Untiy3D 请参考如下链接

  1. 下载链接

  2. 集成到项目中文档

Metal 介绍

Metal 是一个和 OpenGL ES 类似的面向底层的图形编程接口,通过使用相关的 api 可以直接操作 GPU ,最早在 2014 年的 WWDC
Metal 是 iOS 平台独有的,意味着它不能像 OpenGL ES 那样支持跨平台,但是它能最大的挖掘苹果移动设备的 GPU 能力,进行复杂的运算,像 Unity 等游戏引擎都通过 Metal 对 3D 能力进行了优化, App Store 还有相应的运用 Metal 技术的游戏专题。
Metal 具有特点

  • GPU 支持的 3D 渲染
  • 和 CPU 并行处理数据 (深度学习)
  • 提供低功耗接口
  • 可以和 CPU 共享资源内存
OpenGL ES 介绍

OpenGL是用于2D/3D图形编程的一套基于C语言的统一接口,在桌面windows,Mac,Linux/Unix上均可兼容。
OpenGL ES是在OpenGL嵌入式设备上面的版本,也就是安卓/iPhone,其他嵌入式等移动设备的编程规范。(除此之外,在web上也有相应的WebGL)
OpenGL ES应用开发实践指南 iOS卷

SceneKit

相对简单又提供了大量的API接口,基本上能够满足大部分需求 是本次介绍的重点

  • sceneKit 从WWWDC2012 至今,苹果也陆续对该框架进行的升级,使其功能变得强大,不仅支持常见的节点约束,粒子动画,骨骼动画等强大特性
    因其API 相对完善 使用简单 强力推荐
  • SceneKit使用的是右手坐标系,默认视图的方向是沿负Z轴方向的。可以简单的记住红色为x轴,绿色为y轴,蓝色为z轴


    image.png
再介绍一下SceneKit 展示相关API
SCNView

SCNView是显示3D模型对象的视图,继承自UIView。 可以理解为画布

SCNSCene

SCNSCene 自带一个定义了坐标系的root node(根节点),使用scene gragh来组织场景,可以向内部增加树状结构的内部节点(node),例如 lights光源, cameras相机, geometry几何体, particle emitters粒子发射源. 需要放到SCNView的实例中呈现

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如
camera

摄像机的显示范围控制,小于zNear不显示,大于zFar不显示.添加到一个空节点的camera属性里


image.png
SCNView内置属性
  1. 显示统计数据
    scnView.showsStatistics = true
  2. 打开相机控制
    scnView.allowsCameraControl = true
  3. 自动启用默认光源
    scnView.autoenablesDefaultLighting = true
  4. allowsCameraControl允许使用简单手势控制相机
  • 单指滑动:旋转相机;
  • 双指滑动:移动相机;
  • 双指捏合:缩放;
  • 双击:如果有两个相机则切换,一个相机则返回原始状态;
  1. autoenablesDefaultLighting创建一个通用的全方向光源;
    fps:帧率,每秒渲染的画面数
  • :每帧画面渲染的总物体数,多光源照射同一物体时会渲染多次
  • :每帧画面渲染的多边形总数量
    下面贴一下SCNView展示OBJ的代码
      let frame =  CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
      //SCNView是显示3D模型对象的视图,继承自UIView
      let scncesView = SCNView(frame: frame)
      scncesView.allowsCameraControl = true
      scncesView.showsStatistics = true
      // scncesView.autoenablesDefaultLighting = true
      scncesView.backgroundColor = UIColor.black
      self.view.addSubview(scncesView)
      //从 art.scnassets 加载OBJ
     let dir = "art.scnassets/capture/5f09505ae2134eac8b4dee35fd024550"
     let scnce = SCNScene(named: dir + "/custom.obj")
     let node = scnce?.rootNode.childNodes.first
     node?.geometry?.firstMaterial?.lightingModel = .blinn
     node?.geometry?.firstMaterial?.diffuse.contents = dir + "/custom.jpg"
     scncesView.scene = scnce
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,050评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,538评论 1 306
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,673评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,622评论 0 218
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,047评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,974评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,129评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,893评论 0 209
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,654评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,828评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,297评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,619评论 3 262
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,326评论 3 243
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,176评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,975评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,118评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,909评论 2 278

推荐阅读更多精彩内容