简介:

达成篇回顾:

ARKit初探篇(链接)中写到哪被一个AR项目,包括开发条件,建立项目,及基础代码实现,在git的demo填补加了手势的拍卖,简单实现点击球体实现渲染图轮换

初稿地址:http://www.2bjs.com

迎接加入q群 150731459

本篇介绍:

以虚拟世界与诚实世界结合起来,那么真实世界是生活的,那么虚拟世界也将是生存的,这样才能够给用户傻傻的撤并不彻底现实世界和虚拟世界;本篇加入了有些卡通(自转/公转)让效果还炫酷,并且针对光线进行部分拍卖,让职能看起更实事求是

正文:

功能亮:

兑现思路:

1.初始化几哪里节点

2.渲染(图,光线处理)

3.兑现–>太阳自转,地球自转,月亮自转

4.冲中自转与公转关系,处理黄道与白道节点

5.添加光照度看起又实际

步骤:

1.初始化AR环境必备

@property (nonatomic,strong)ARSCNView *arSCNView;

@property (nonatomic,strong)ARSession *arSession;

@property (nonatomic,strong)ARConfiguration *arSessionConfiguration;

[self.view addSubview:self.arSCNView];

self.arSCNView.delegate = self;

事后懒加载

2.渲染

盖烨节点也例,渲染图

multiply同diffuse这里还设置一下,感觉会真一点

_sunNode.geometry.firstMaterial.multiply.contents = @”sun”;

_sunNode.geometry.firstMaterial.diffuse.contents = @”sun”;

multiply (The multiply property specifies a color or an image used
to multiply the output fragments with. The computed fragments are
multiplied with the multiply value to produce the final fragments. This
property may be used for shadow maps, to fade out or tint 3d objects.)

也就是说当我们之所以是特性来渲染三维对象的语,会淡化,以烨也例子,当我们唯有设置了multiply,显示效果是于淡的

diffuse(The diffuse property specifies the amount of light
diffusely reflected from the surface. The diffuse light is reflected
equally in all directions and is therefore independent of the point of
view)

diffuse夫特性渲染会均匀扩散到全局,每一个见识,以阳光也例子

当我们把有片单渲染属性全部装,那么效果是匪是进一步真实吗?

wrapS,wrapT,换行模式当我们的阳光转起来效果就算保障原样,看起真不见面花费少

_sunNode.geometry.firstMaterial.multiply.wrapS =

_sunNode.geometry.firstMaterial.diffuse.wrapS =

_sunNode.geometry.firstMaterial.multiply.wrapT =

_sunNode.geometry.firstMaterial.diffuse.wrapT = SCNWrapModeRepeat;

wrapS从左到右(Determines the receiver’s wrap mode for the s
texture coordinate. Defaults to
SCNWrapModeClamp),wrapT从上到下(Determines the receiver’s wrap
mode for the t texture coordinate. Defaults to
SCNWrapModeClamp),以烨也例子,假要我们不设置这个特性之说话看效果自转的时段看起就是见面十分费

安地的反光度,太阳照射到地上之光明,反多少光泽出去,并且安装反光出之无非是呀颜色之无非

_earthNode.geometry.firstMaterial.shininess = 0.1; // 光泽

_earthNode.geometry.firstMaterial.specular.intensity = 0.5; //
反射多少才下

_moonNode.geometry.firstMaterial.specular.contents = [UIColor
grayColor];//反射出的只是呀但

_moonNode.geometry.firstMaterial.specular.contents = [UIColor
redColor];当我们这里易吧红色的时候地球反光区域所反射出的就呢尽管是红

3.兑现–>太阳自转,地球自转,月亮自转

坐阳光也例子,我们仅仅待写一个rotateAnimation,设置动画锁得的日子,旋转fromValue和toValue,然后设置实行次数,将动画片长到阳光节点上,当然和平面世界不同的凡咱用设备3D世界的团团转fromValue和toValue,代码如下

CABasicAnimation *animation = [CABasicAnimation
animationWithKeyPath:@”contentsTransform”];

animation.duration = 10.0;

从000的职务扩展//此时图于不停的拉伸

animation.fromValue = [NSValue
valueWithCATransform3D:CATransform3DConcat(CATransform3DMakeTranslation(0,
0, 0), CATransform3DMakeScale(3, 3, 3))];

animation.toValue = [NSValue
valueWithCATransform3D:CATransform3DConcat(CATransform3DMakeTranslation(1,
0, 0), CATransform3DMakeScale(5, 5, 5))];

animation.repeatCount = FLT_MAX;

[_sunNode.geometry.firstMaterial.diffuse addAnimation:animation
forKey:@”sun-texture”];

4.因中自转与公转关系,处理黄道与白道节点

@property(nonatomic, strong)SCNNode * earthGroupNode;//地月节点

咱俩做到地球与月自转后,首先来拍卖月球和地之公转,把月的公转节点上加为地月节点的子节点

以月球为例子的公转动画,代码如下

CABasicAnimation *moonRotationAnimation = [CABasicAnimation
animationWithKeyPath:@”rotation”];

moonRotationAnimation.duration = 5.0;

moonRotationAnimation.toValue = [NSValue
valueWithSCNVector4:SCNVector4Make(0, 1, 0, M_PI * 2)];

moonRotationAnimation.repeatCount = FLT_MAX;

[moonRotationNode addAnimation:moonRotationAnimation forKey:@”moon
rotation around earth”];

[_earthGroupNode addChildNode:moonRotationNode];

球与月球公转完成,此时我们需要去装一个黄道,然后将地月节点在增长吧黄道的子节点.并且实现地之公转动画

//添加节点地绕太阳之节点-黄道

SCNNode *earthRotationNode = [SCNNode node];

[_sunNode addChildNode:earthRotationNode];

[earthRotationNode addChildNode:_earthGroupNode];

此时咱们来得力量就是来了

5.添加光照度看起再也实际

自转与公转完成后,基本的机能为尽管到位了,添加光照节点太让职能看起还真实.光照效果就距离而更改,此时我们就可以看到上文效果亮中之职能了

lightNode.light.attenuationEndDistance = 20.0;

lightNode.light.attenuationStartDistance = 1.0;

[SCNTransaction begin];

[SCNTransaction setAnimationDuration:1];{

lightNode.light.color = [UIColor whiteColor]; 

_sunHaloNode.opacity = 0.5; 

}

_sunHaloNode = [SCNNode node];

[_sunNode addChildNode:_sunHaloNode];

总结:

本章主要困难也公转与自转的关联,各个节点谁是何人的子节点,首先我们先安装地月节点,然后上加黄道,把动画添加于黄道节点,然后重新错过处理地球与阳光的涉及,当然在动画的处理后,添加光照度与更健全的渲染也是格外关键之,有知道不适用的地方,请提出,谢谢大家

说到底为大家奉献上本文代码地址,我在git中的demo中呢写了诠释,<本文demo在BETA版本被可运行>大家可仔细看一下demo迎接大家下载,star
(其他demo–关于简单动画)

C博客地址

demo地址: swift版本(新,内带注释)
Xcode9可以运作 下充斥链接

转载请注明出处
  原文地址:http://www.2bjs.com作者Fujian
Bi

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图