在了解ARKiT框架時(shí)满粗,突然看到demo中有SceneKit引擎簸淀,由于都是在寫應(yīng)用app,沒(méi)有涉及于是就拿來(lái)看看了委可。
SceneKit是一個(gè)高性能的渲染游戲引擎渊跋,他能夠?qū)?D模型文件,用很簡(jiǎn)單的方式渲染出來(lái)。底層實(shí)踐是Metal和OpenGL刹枉。
在Xcode9中構(gòu)建新的VR應(yīng)用中會(huì)有引擎選擇叽唱,一開(kāi)始沒(méi)有沒(méi)有VR的應(yīng)用,所以將其放置在普通應(yīng)用中微宝。
Demo
插入SceneKit框架
#import <SceneKit/SceneKit.h>
構(gòu)建一個(gè)用來(lái)展示的view
@property (nonatomic,strong)SCNView *scnView;
_scnView = [[SCNView alloc]initWithFrame:self.view.bounds];
_scnView.backgroundColor = [UIColor clearColor];
[self.view addSubview:_scnView];
因?yàn)閟ceneView中默認(rèn)沒(méi)有secene所以我們需要?jiǎng)?chuàng)建一個(gè)場(chǎng)景
_scnView.scene = [SCNScene scene];
tips:secene的用處就相當(dāng)于一個(gè)攝影棚棺亭,里面放著所有的幾何模型,燈光蟋软,攝像機(jī)和其他的屬性镶摘,如果不加入場(chǎng)景那么,所有的元素將沒(méi)有地方展示岳守。
添加攝像機(jī)凄敢,將元素展現(xiàn)在觀眾眼中
//添加攝像機(jī)
SCNCamera *camera = [SCNCamera camera];
SCNNode *cameraNode = [SCNNode node];
cameraNode.camera = camera;
cameraNode.position = SCNVector3Make(-10,0,50);
[_scnView.scene.rootNode addChildNode:cameraNode];
這里要介紹一下SCNNode
當(dāng)我們把攝影棚搭建好之后,我們需要放置燈光湿痢,攝影機(jī)涝缝,模型等道具,但是這些東西不會(huì)自己放置,也不知道放置的位置譬重,這時(shí)我們就要給他一個(gè)坐標(biāo)來(lái)告訴擺放人拒逮,這個(gè)該放置在哪里。SCNNode就是起到坐標(biāo)點(diǎn)的作用臀规。同時(shí)這個(gè)坐標(biāo)點(diǎn)中又可以放置其他的坐標(biāo)點(diǎn)滩援。
在里面加入模型
SCNBox *snow = [SCNBox boxWithWidth:with height:height length:0 chamferRadius:0];
snow.firstMaterial.diffuse.contents = [UIImage imageNamed:@"snow.png"];
SCNNode *snowNode = [SCNNode node];
snowNode.position = SCNVector3Make(postionX,postionY , 0);
snowNode.geometry = snow;
[_scnView.scene.rootNode addChildNode:snowNode];
當(dāng)然我希望將??動(dòng)起來(lái),于是我在demo中添加SCNAction
SCNAction *rotation = [SCNAction rotateByAngle:10 aroundAxis:SCNVector3Make(0, 0, 1) duration:speed];
SCNAction *moveDown = [SCNAction moveTo:SCNVector3Make(moveX, moveY, 0) duration:speed];
SCNAction *moveUp = [SCNAction moveTo:SCNVector3Make(0, moveUpY, 0) duration:0];
demo執(zhí)行效果
用SceneKit寫動(dòng)畫只是微不足道一部分塔嬉,以后隨著以后深入還會(huì)記錄更多SceneKit的用法玩徊。順帶挖一個(gè)利用BaseAnimation動(dòng)畫的坑,這個(gè)是以前的學(xué)習(xí)的谨究,為了防止忘記恩袱,抽空補(bǔ)全上來(lái)。