创建SCNView,SCNScene
SceneKit可以创建一个view用来观察场景,在view的scene子对象里面设置SCNScene。
_scnView=[SCNView new];
_scnView.frame=CGRectMake(130, 10, 300, 300);
_scnView.allowsCameraControl=true;
_scnView.showsStatistics=true;
_scnView.autoenablesDefaultLighting=true;
[self.view addSubview:_scnView];
_scnView.delegate=self;
_scnView.playing=true;
SCNScene *scene=[SCNScene new];
_scnView.scene=scene;
创建节点并设置节点的相机
SceneKit的相机不是单独的一个对象,而是在SCNNode下有一个camera对象,设置这个对象即可。
SCNNode *cameraNode=[SCNNode new];
cameraNode.camera=[SCNCamera new];
cameraNode.camera.automaticallyAdjustsZRange = YES;
//设置节点的相对坐标,这里是直接放到rootNode下,所以也是世界坐标
cameraNode.position=SCNVector3Make(0, 10, 0);
//设置节点的旋转,这里绕自身的x轴逆时针旋转了90度,SceneKit是右手坐标系,这里都是用弧度
cameraNode.eulerAngles=SCNVector3Make(-3.1415/2, 0, 0);
[scene.rootNode addChildNode:cameraNode];
创建物体
SceneKit自带圆锥体,圆柱体,正方体(单词是用Box而不是Unity的Cube),平面等。这里用一个平面来示例。
//创建一个几何体
SCNGeometry *geometry=[SCNPlane planeWithWidth:17 height:17];
//设置纹理,这个contents不仅可以设置颜色,也可以直接设置UIImage
geometry.firstMaterial.diffuse.contents=[UIColor blueColor];
//geometry.firstMaterial.diffuse.contents=[camera getUIImage];
//用geometry生成一个节点并设置相应属性
SCNNode *nodePlane=[SCNNode nodeWithGeometry:geometry];
nodePlane.position=SCNVector3Make(0, -5, 0);
nodePlane.eulerAngles=SCNVector3Make(-3.1415/2, 0, 0);
[scene.rootNode addChildNode:nodePlane];
代替Unity的update的renderer渲染刷新函数
Unity里面是用update函数,SceneKit则是用renderer方法,设置代理< SCNSceneRendererDelegate >就可以重写这个函数。
-(void) renderer:(id<SCNSceneRenderer>)renderer updateAtTime:(NSTimeInterval)time
{
//可以在这里面做想做的事情,time参数我没用过,猜测应该是一个时间戳
}