SceneKit_中级03_切换照相机视角

2022-05-13 15:56:39 浏览数 (2)

SceneKit_入门01_旋转人物

SceneKit_入门02_如何创建工程

SceneKit_入门03_节点

SceneKit_入门04_灯光

SceneKit_入门05_照相机

SceneKit_入门06_行为动画

SceneKit_入门07_几何体

SceneKit_入门08_材质

SceneKit_入门09_物理身体

SceneKit_入门10_物理世界

SceneKit_入门11_粒子系统

SceneKit_入门12_物理行为

SceneKit_入门13_骨骼动画

SceneKit_中级01_模型之间的过渡动画

SceneKit_中级02_SCNView 详细讲解

SceneKit_中级03_切换照相机视角

SceneKit_中级04_约束的使用

SceneKit_中级05_力的使用

SceneKit_中级06_场景的切换

SceneKit_中级07_动态修改属性

SceneKit_中级08_阴影详解

SceneKit_中级09_碰撞检测

SceneKit_中级10_滤镜效果制作

SceneKit_中级11_动画事件

SceneKit_高级01_GLSL

SceneKit_高级02_粒子系统深入研究

SceneKit_高级03_自定义力

SceneKit_高级04_自定义场景过渡效果

SceneKit_高级05 检测手势点击到节点

SceneKit_高级06_加载顶点、纹理、法线坐标

SceneKit_高级07_SCNProgram用法探究

SceneKit_高级08_天空盒子制作

SceneKit_高级09_雾效果

SceneKit_大神01_掉落的文字

SceneKit_大神02_弹幕来袭

SceneKit_大神03_navigationbar上的3D文字

让学习成为一种习惯

在游戏中,我们经常可以看到,有视角切换这个功能,那在SceneKit中怎么进行视角切换了,今天就带大家练习这个功能!

今天教大家实现下面的效果:

让学习成为一种习惯

让学习成为一种习惯

让学习成为一种习惯

走进代码的世界

1.创建工程(略)

2.添加素材(自己截图, 放到工程中去)

太阳

月球

地球

3.创建3个按钮和SCNView页面

在.m文件中添加对应的三个事件

4.添加框架#import <SceneKit/SceneKit.h>

5.创建游戏场景(这个简单)

代码语言:javascript复制
self.scnView.scene = [SCNScene scene];
self.scnView.backgroundColor = [UIColor blackColor];

6.创建太阳系(也很简单)

代码语言:javascript复制
SCNNode *sunNode = [SCNNode node];
sunNode.geometry = [SCNSphere sphereWithRadius:3];
sunNode.geometry.firstMaterial.diffuse.contents = @"sun.jpg";
[self.scnView.scene.rootNode addChildNode:sunNode];

7.创建地月系(有点复杂哦)

代码语言:javascript复制
// 1.我们需要先创建一个地月系节点.并且设置它为太阳系的子节点
 SCNNode *earthMoonNode = [SCNNode node];
 earthMoonNode.position = SCNVector3Make(10, 0, 0);
 [sunNode addChildNode:earthMoonNode];

//2.创建一个地球节点,添加到地月系节点上去
 SCNNode *earthNode = [SCNNode node];
earthNode.geometry = [SCNSphere sphereWithRadius:1];
earthNode.geometry.firstMaterial.diffuse.contents = @"earth.jpg";
earthNode.position = SCNVector3Make(0, 0, 0);
[earthMoonNode  addChildNode:earthNode];

// 3.创建一个月球系,让它添加到地球节点上去
SCNNode *moonNode = [SCNNode node];
moonNode.geometry = [SCNSphere sphereWithRadius:0.5];
moonNode.geometry.firstMaterial.diffuse.contents = @"moon.jpg";
moonNode.position = SCNVector3Make(2, 0, 0);
[earthNode addChildNode:moonNode];

8.接下来是,执行运动了

代码语言:javascript复制
//1.太阳绕着Y轴自传
 SCNAction *sunRotate = [SCNAction repeatActionForever:[SCNAction rotateByAngle:0.1 aroundAxis:SCNVector3Make(0, 1, 0) duration:0.3]];
[sunNode runAction:sunRotate];

// 2.地球绕着Y轴自传
  SCNAction *rotation =[SCNAction repeatActionForever:[SCNAction rotateByAngle:0.1 aroundAxis:SCNVector3Make(0, 1, 0) duration:0.05]];
  [earthNode runAction:rotation];

完成上面的步骤,太阳系我们创建好了,运行一下试试吧!

9.创建两个视角

代码语言:javascript复制
 // 1.我们创建一个场景范围内的第三视角
@property(nonatomic,strong)SCNNode *thirdViewCamera;
self.thirdViewCamera = [SCNNode node];
self.thirdViewCamera.camera = [SCNCamera camera];
self.thirdViewCamera.camera.automaticallyAdjustsZRange = true;
self.thirdViewCamera.position = SCNVector3Make(0, 0, 30);
[self.scnView.scene.rootNode addChildNode:self.thirdViewCamera];

// 2.我们创建一个地月系的第一视角
@property(nonatomic,strong)SCNNode *firstViewCamera;
 self.firstViewCamera = [SCNNode node];
self.firstViewCamera.camera =[SCNCamera camera];
self.firstViewCamera.position = SCNVector3Make(0, 0, 10);
[earthMoonNode addChildNode:self.firstViewCamera];

10.下面就是决定你视角是哪个的重要代码,请认真记住

代码语言:javascript复制
 self.scnView.pointOfView = self.thirdViewCamera;

11.下面是和我们界面上绑定的三个button的事件

代码语言:javascript复制
// 进入太阳系
- (IBAction)enterSunSystem:(id)sender {
self.scnView.pointOfView = self.thirdViewCamera;
SCNAction *move = [SCNAction moveTo:SCNVector3Make(0, 0, 30) duration:1];
[self.thirdViewCamera runAction:move];  
}
// 进入地月系
- (IBAction)enterEarthMoonSystem:(id)sender {
self.scnView.pointOfView = self.firstViewCamera;
}
// 离开太阳系
- (IBAction)exitSunSystem:(id)sender {
  SCNAction *move = [SCNAction moveTo:SCNVector3Make(0, 0, 400) duration:1];
  [self.thirdViewCamera runAction:move];
}

如果你想要理解三个星球的运动原理,请看下面这张图

让学习成为一种习惯

你应该知道的

系统提供给我们的旋转方法,是只能沿着轴转动,比如你的节点在(0,1,0) 你让他沿着X轴旋转,它旋转后的坐标还是(0,1,0),因为它是沿着自身坐标系旋转的。

上图原理:

我们首先创建一个地月节点,将其设置为太阳的自节点,这样太阳旋转的时候,我们的地月节点,就会围绕这太阳转动,然后我们创建一个地球节点,让其成为地月节点的子节点,这样地球就能和地月节点一起围绕太阳节点转动了,同样的道理,月球节点成为地球节点的子节点,那么地球自身的时候,也能带动月球转动了。

提示:

本节内容比较简单,但是使用的频率比较高,请大家务必掌握。


代码库,听说经常给人点赞都当老板了!

0 人点赞