2018正版葡京赌侠诗 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]2018正版葡京赌侠诗,;

总结:

本章主要难点为公转与自转的关系,各种节点什么人是何人的子节点,首先大家先安装地月节点,然后添加黄道,把动画添加在黄道节点,然后再去处理地球与太阳的关系,当然在动画的拍卖未来,添加光照度与更完美的渲染也是老大首要的,有了解不合适的地点,请提议,谢谢大家

终极为大家献上本文代码地址,我在git中的demo中也写了诠释,<本文demo在BETA版本中可运行>我们可以仔细看一下demo迎接大家下载,star
(其余demo–关于不难动画)

C博客地址

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

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

相关文章