[SceneKit专题-OC]1.Hello SceneKit

  • 本系列文章的学习首先要感谢史前图腾的共享精神,在他的系列文章中有详细的解释,但是他的代码都是Swift写的.并且代码的解释比较少,
  • 在这里我提供了demo-OC版供大家参考和学习,
  • demo地址:
    OC-地址
    swif-地址

效果图

知识点解析

Scenes:SCNScene

自带一个定义了坐标系的root node(根节点),使用scene gragh来组织场景,可以向内部增加树状结构的内部节点(node),例如 lights光源, cameras相机, geometry几何体, particle emitters粒子发射源.
需要放到SCNView的实例中呈现,SCNView在OSX(macOS)中是NSView的子类,在iOS中是UIView的子类;

左侧树状结构

[SceneKit专题-OC]1.Hello SceneKit_第1张图片
image.png

坐标系,屏幕外是+Z方向,坐标使用向量表示,示例SCNVector3(x: 0, y: 5, z: 10)

[SceneKit专题-OC]1.Hello SceneKit_第2张图片
image.png

Nodes:SCNNode

游戏中的每个元素都被称为node(节点),存放在树状结构scene gragh中,例如 lights光源, cameras相机, geometry几何体, particle emitters粒子发射源.每个scene graph中包含一个特殊的基础节点:root node(根节点),可以把其他节点添加到节点下面,变成它的子节点.

添加到scene中的node,默认在(x:0, y:0, z:0),即相对于父节点的位置.要想调整节点在父节点的位置,应该调整local coordinates(本地坐标系),而不是调整world coordinates(世界坐标系).

注意
默认情况下,如果一个场景中没有任何改变时,Scene Kit会进入"paused"(暂停)状态,为了防止这种情况,需要在创建SCNView实例时设置playing属性为true如

scnView.playing = true
camera

摄像机的显示范围控制,小球zNear不显示,大于zFar不显示.添加到一个空节点的camera属性里

[SceneKit专题-OC]1.Hello SceneKit_第3张图片
image.png
 // SCNScene - 默认有一个根节点
    SCNScene *scene = [SCNScene new];
    // 将该场景添加到 SCNView 上 否侧该场景无法显示
    scenView.scene = _scene = scene;
    scene.background.contents = [UIImage imageNamed:@"Background_Diffuse"];
    
    // 创建一个相机节点
    SCNNode *node = [SCNNode new];
    node.camera = [SCNCamera new];
    node.position = SCNVector3Make(0, 5, 10);
    // 将其添加到根节点上
    [scene.rootNode addChildNode:node];

primitives geometry(原生几何体)

系统自带了很多基础的几何体,添加到一个空节点的geometry属性里
第一排从左起:cone(圆锥体), torus(圆环体), capsule(胶囊体), tube(管道)
第二排从左起:pyramid(四棱锥), box(长方体), sphere(球体), cylinder(圆柱体)

[SceneKit专题-OC]1.Hello SceneKit_第4张图片
image.png

SCNView内置属性

// SCNView
    SCNView *scenView = [SCNView new];
    scenView.backgroundColor = [UIColor redColor];
    scenView.frame = self.view.bounds;
    scenView.showsStatistics = true; // 显示统计数据
    scenView.allowsCameraControl = true; // 打开相机控制
    scenView.autoenablesDefaultLighting = true; // 打开默认光源 _  如果该选项不打开 几何体的效果将无法显示
    [self.view addSubview:scenView];

1.showsStatistics在底部显示一个实时的统计条,左侧+号点击可展开;
2.showsStatistics允许使用简单手势控制相机
-单指滑动:旋转相机;
-双指滑动:移动相机;
-双指捏合:缩放;
-双击:如果有两个相机则切换,一个相机则返回原始状态;
3.autoenablesDefaultLighting创建一个通用的全方向光源;

fps:帧率,每秒渲染的画面数
◆:每帧画面渲染的总物体数,多光源照射同一物体时会渲染多次
▲:每帧画面渲染的多边形总数量,
✸:可见的光源总数(影响物体的光源), Scene Kit推荐不要同时使用3个以上光源

  • 其他代码详见demo - OC版

你可能感兴趣的:([SceneKit专题-OC]1.Hello SceneKit)