swift 快速奔跑的兔几 本节的内容是:SceneKit 第一说 创建一个3D胶囊
来源:互联网 发布:matlab哈密顿回路算法 编辑:程序博客网 时间:2024/04/29 12:28
SceneKit是一组类,可以用来在App中创建和呈现3D场景。
它还可以和core animation和sprite kit无缝交互,这就意味着我们可以在多种上下文中使用SceneKit
1、SceneKit的结构
SceneKit通过SCNView来呈现一切。它是UIView(NSView For OS X)的一个子类。在SCNView的内部,创建和准备一个场景(SCNScene)。场景中包含节点,这些节点被编排为一个场景图:一个节点有0个或多个子节点, 但是只能有一个父节点。
2、添加SceneKit视图
创建一个新的iOS应用程序
添加SceneKit框架:在项目导航器的顶部选择项目,在项目设置内向下滚动至:linked frameworks and libraries部分,单击+,选择SceneKit.framework
将主视图控制器的类由UIView改成SCNView
在viewDidLoad中添加代码
import UIKitimport SceneKitclass SceneKitViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let sceneView = self.view as! SCNView sceneView.backgroundColor = UIColor.grayColor() // Do any additional setup after loading the view. }}
这时运行,即可看到灰色的背景
3、添加场景:向viewDidLoad中添加如下代码
// 添加场景 let sceneOne = SCNScene() sceneView.scene = sceneOne
SCNScene对象是所有SceneKit对象的容器。想要向用户显示的对象都要放在这个容器内。注意,尽管我们可以有多个场景,但是视图中一次只能有一个场景可见。
4、添加照相机
照相机是用户进入3D场景的门户,它们是你观察3D世界的虚拟眼睛。你看到的东西取决于照相机的位置,角度和一些其它参数。
如何添加照相机:
// 添加照相机 并指明水平和垂直视角都是45度 let cameraOne = SCNCamera() cameraOne.xFov = 45 cameraOne.yFov = 45
下面,需要将照相机附加到一个节点上:
// 将照相机附加到节点 let cameraNode = SCNNode() cameraNode.camera = cameraOne cameraNode.position = SCNVector3(0, 0, 20) sceneOne.rootNode.addChildNode(cameraNode)
5、添加3D对象:一枚胶囊
// 添加3D对象 let capsuleOne = SCNCapsule(capRadius: 2.5, height: 10) let capsuleNodeOne = SCNNode(geometry: capsuleOne) capsuleNodeOne.position = SCNVector3(0,0,0) sceneOne.rootNode.addChildNode(capsuleNodeOne)
此时可以看到一枚白色的胶囊。屏幕上木有光照,所以默认为全亮度的白色。
6、添加光源
有许多不同类型的光源可供使用:
*环境光源:在整个场景内投射均匀光
*泛光源:从单个点向所有方向辐射光线
*平行光源:在单个方向上投射光
*聚光源:在给定方向上从单个方向投射光
下面给胶囊添加一个环境光源和一个泛光源
// 添加环境光源 let ambientLight = SCNLight() ambientLight.type = SCNLightTypeAmbient ambientLight.color = UIColor(white: 0.25, alpha: 1.0) let ambientNodeOne = SCNNode() ambientNodeOne.light = ambientLight sceneOne.rootNode.addChildNode(ambientNodeOne) // 添加泛光源 let omniLight = SCNLight() omniLight.type = SCNLightTypeOmni omniLight.color = UIColor(white:1.0, alpha: 1.0) let omniNodeOne = SCNNode() omniNodeOne.light = omniLight omniNodeOne.position = SCNVector3(-5,8,5) sceneOne.rootNode.addChildNode(omniNodeOne)
- swift 快速奔跑的兔几 本节的内容是:SceneKit 第一说 创建一个3D胶囊
- swift 快速奔跑的兔几 本节的内容是:SceneKit 第二说 实现动画&创建文本几何体
- swift 快速奔跑的兔几 本节的内容是:SceneKit 第三说 使用材料 法向贴图
- swift 快速奔跑的兔几 本节的内容是:SceneKit命中检测
- swift 快速奔跑的兔几 本节的内容是:SceneKit 约束
- swift 快速奔跑的兔几 本节的内容是:SceneKit COLLADA文件
- swift 快速奔跑的兔几 本节的内容是:照片库 第二说
- swift 快速奔跑的兔几 本节的内容是:SpriteKit第一讲
- swift 快速奔跑的兔几 本节的内容是:音频与视频 第一说 AVFoundation 以及简单的iOS视频app
- swift 快速奔跑的兔几 本节的内容是:OS X和iOS的应用程序
- swift 快速奔跑的兔几 本节的内容是:基于文档的应用程序
- swift 快速奔跑的兔几 本节的内容是:iOS上基于文档的应用程序
- swift 快速奔跑的兔几 本节的内容是:序列化与反序列化
- swift 快速奔跑的兔几 本节的内容是:函数(函树?嘿嘿嘿^.^)
- swift 快速奔跑的兔几 本节的内容是:协议和委托
- swift 快速奔跑的兔几 本节的内容是:应用程序沙盒
- swift 快速奔跑的兔几 本节的内容是:用NSNotification发送通知
- swift 快速奔跑的兔几 本节的内容是:图形用户界面
- 图片上下左右居中
- pAdTy_-4 与其它应用程序的交互
- 财务报表开发实例分析:几个通用维度介绍与关键点
- LeetCode 046 Permutations
- 八皇后问题
- swift 快速奔跑的兔几 本节的内容是:SceneKit 第一说 创建一个3D胶囊
- android获取网络数据
- android 如何去获取手机Gps的信号强度
- sql异常
- 为什么我用VS2010做EXTPB.NET程序,有些文件没有发布出去?
- JQuery.Ajax之错误调试帮助信息
- 【知识】Eclipse中搜索的使用
- swiper下loop模式点击事件无效的原因
- POJ 2178 (凸包 旋转卡壳)