在要发之前我们要先了解
SceneKit 是一个OC 框架,开始之前,先熟悉一下SceneKit 的三维坐标系:
很清楚的看到,SceneKit 中的坐标系是右手坐标系(笛卡尔坐标系),如果需要与其他3D框架共享数据,先了解其框架是右手坐标系还是左手坐标系。其实也很好转化,就是Z 轴的正负不一样而已。
在开始开发之前,一定要了解下面这几个非常重要的类
类 / 协议
描述
SCNView & SCNSceneRenderer
SCNScene
SCNNode
SCNGeometry
一个可以连接到一个节点的三维物体。一个几何体(有时称为模型或网格)只定义了一个可见物体的形状。要定义对象的表面颜色图案,你必需要给几何体要附加材料。然后给材料贴图,或者上色,这个几何体表面才会有颜色,或者图案。
你可以从3D建模工具生成的.dae文件中加载一个几何体,也可以用代码创建,SceneKit 提供了几种常见几何体,是SCNGeometry 的子类,比如长方体,球,圆柱球等等,后面我们会写一个demo会把官方提供的几何体给大家列出来,给大家一个直观的感受。 当然我们也可以用三维坐标,法向量自定义几何体,也可以讲一个2D 图案转化成一个具有深度(厚度)的三维几何体。后面应该专门有一篇会讲到利用贝塞尔曲线将一个2D 图案转化成一个具有深度(厚度)的三维几何体。
SCNMaterial
材质,由于在3D建模工具中呈现球形,所以也叫材质球。上色,贴图全靠它。
SCNLight
光源可以附加到节点上,在渲染场景中提供着色
SCNCamera
虚拟摄像机可以附加到节点上,提供了一个场景的视图。
我们要使用的是SceneKit这个苹果的库。
项目中需要引入
import <SceneKit/SceneKit.h>
常用的几个类
NO.1 SCNView
SCNView主要作用是显示SceneKit 的3D内容,在iOS 系统上是UIView 的子类,由于这个原因它可以添加到我们的视图中去,如果我们做一个应用想要加点3D元素,SceneKit绝对是首选。
类似UIView,用来显示 SceneKit 的内容,定义了一些代理方法,可以用 addSubView 方法添加到UiView 中
NO.2 SCNScence
SCNScene 为游戏中的场景,简单的说,就是放的游戏元素(地图,灯光,人物的游戏元素)的地方。
SceneKit 内容的容器. 你可以从3D建模工具生成的.dae文件中加载一个场景,或者用代码创建一个 ,然后把它显示在视图上
NO.3 SCNNode
SCNNode 被称为节点,一个大型的游戏场景结构就是由无数个小的节点组成,它有自己的位置和自身坐标系统,我们可以把几何模型,灯光,摄像机的游戏中的真实元素,吸附到SCNNode 节点上。
一个场景的基本构建块,你可以把摄像机,灯光,几何体附加到节点上
NO.4 SCNCamera
SCNCamera 被称为照相机或者摄像机,游戏就相当于一个生活中的环境,我们可以通过照相机捕捉到你想要观察的画面。
虚拟摄像机可以附加到节点上,提供了一个场景的视图。
NO.5 SCNLight
SCNLight 被称为灯光,没有光线的话,我们是看不到物体的,在游戏中也是一样的,我们可以给游戏中添加不同的灯光,来模拟逼真的环境。
光源可以附加到节点上,在渲染场景中提供着色
NO.6 SCNAudioSource
SCNAudioSource 主要负责给游戏中添加声音。
NO.7 SCNAction
SCNAction 主要负责改变节点的属性,比如我们要让一个地球围绕太阳旋转,一个气球从一个地方移动另外一个地方。
NO.8 SCNTransaction
SCNTransaction 主要负责提交改变节点属性的事件,后面具体讲到再说明白。
NO.9 SCNGeometry
SCNGeometry 就是呈现三维模型的类,我们模型具体长什么样子,是个正方体还是长方体,都是它说了算。
一个可以连接到一个节点的三维物体。一个几何体(有时称为模型或网格)只定义了一个可见物体的形状。要定义对象的表面颜色图案,你必需要给几何体要附加材料。然后给材料贴图,或者上色,这个几何体表面才会有颜色,或者图案。
你可以从3D建模工具生成的.dae文件中加载一个几何体,也可以用代码创建,SceneKit 提供了几种常见几何体,是SCNGeometry 的子类,比如长方体,球,圆柱球等等,后面我们会写一个demo会把官方提供的几何体给大家列出来,给大家一个直观的感受。 当然我们也可以用三维坐标,法向量自定义几何体,也可以讲一个2D 图案转化成一个具有深度(厚度)的三维几何体。后面应该专门有一篇会讲到利用贝塞尔曲线将一个2D 图案转化成一个具有深度(厚度)的三维几何体。
NO.10 SCNMaterial
SCNMaterial 定义模型的外观,好比一个球体,它渲染出来是红色,还是绿色,会不会发光等
材质,由于在3D建模工具中呈现球形,所以也叫材质球。上色,贴图全靠它。