ARKit-带你走上前新的世界(二:动画及光线处理)

简介:

直达篇回顾:

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

发表评论

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