[SceneKit专题]1.Hello SceneKit

作者: 苹果API搬运工 | 来源:发表于2017-04-02 22:07 被阅读2831次

    说明

    本系列文章是对<3D Apple Games by Tutorials>一书的学习记录和体会

    此书对应的代码地址

    SceneKit系列文章目录

    更多iOS相关知识查看github上WeekWeekUpProject

    系列文章目录

    1. Hello SceneKit

    2. physics物理效果

    3. Render Loop渲染循环

    4. Particle Systems粒子系统

    5. 3D空间的触摸事件

    6. Scene Editor场景编辑器

    7. Cameras相机

    8. Lights灯光

    9. Basic Collision Detection碰撞检测基础

    10. Materials材质

    11. Reference Nodes引用节点

    12. Shadows阴影

    13. Intermediate Collision Detection碰撞检测中级

    14. Motion Control运动控制

    15. Transitions转场

    16. Actions动作

    17. Audio音频

    18. Mac常用3D工具

    19. MagicaVoxel的使用,3D体素网格建模

    20. 仿水果忍者小游戏Geometry Fighter

    21. 3D打砖块游戏Breaker

    22. 3D平衡球游戏Marble Maze

    23. 跨平台游戏(macOS,tvOS,watchOS)

    24. 体素风格过马路游戏Mr. Pig

    25. 如何制作一个像Can Knockdown的游戏

    26. 如何制作一个像Stack的游戏


    Scenes:SCNScene

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

    左侧树状结构


    QQ20170402-175546@2x.png

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


    QQ20170402-180815@2x.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属性里


    QQ20170402-204457@2x.png
    func setupCamera() {
      // 1.创建空的节点
      cameraNode = SCNNode()
      // 2.创建相机,添加到节点中
      cameraNode.camera = SCNCamera()
      // 3.设置相机节点的位置
      cameraNode.position = SCNVector3(x: 0, y: 0, z: 10)
      // 4.添加到根节点中
      scnScene.rootNode.addChildNode(cameraNode)
    }
    

    primitives geometry(原生几何体)

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

    QQ20170402-211703@2x.png

    SCNView内置属性

    // 1.显示统计数据
    scnView.showsStatistics = true
    // 2.打开相机控制
    scnView.allowsCameraControl = true
    // 3.自动启用默认光源
    scnView.autoenablesDefaultLighting = true
    

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

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


    QQ20170402-214534@2x.png QQ20170402-215145@2x.png

    相关文章

      网友评论

      • 下班买鸡蛋:能利用顶点自制一个几何体吗
        苹果API搬运工:@李昊_9454 在3D软件中打开点云数据,然后导出为支持的格式,估计可以
        下班买鸡蛋:@史前图腾 我看都是利用顶点和索引绘制的几何体,如果是点云数据的话该怎么处理
        苹果API搬运工:@李昊_9454 可以用OpenGL或MetalKit
      • b95f0ca6ca78:很赞,看了很多你的文章,学习了
      • 冰三尺:请问作者看的是英文原版吗?
        冰三尺:@史前图腾 ok, 目前来看我没找到更好的系统的讲解, 也只能咬牙看英文原版, 再加上你翻译的这部分教程.
        苹果API搬运工:@里脊糖醋 看的是英文原版,但并没有完整地翻译下来,主要是翻译了其中概念性东西,常见的类,基础设置项等.书中原本讲解了三个完整的小游戏demo,我并没有翻译
      • 709b16930696:看到上面评论,厉害啊,我也是最近对arkit才开始学scene的,赞一个
      • 穿越地平线的渴望__:理论水平不错,Xcode这两天才出来~
        苹果API搬运工:@BeStronge <3D iOS Games by Tutorials>
        穿越地平线的渴望__:@史前图腾 很有前瞻性👍👍.能推荐一下书名吗?
        苹果API搬运工:@BeStronge SceneKit这个框架在两年前就出了,但是应用太少. 网络上也有了一部分中文资料,可惜普遍水平不高,所以我干脆翻译了国外的一本书,虽然翻译的不完整,但是入门基本够用了. 而苹果今年推出的ARKit是基于SceneKit,再加上摄像头和传感器组成的ARSession,才终于火了起来

      本文标题:[SceneKit专题]1.Hello SceneKit

      本文链接:https://www.haomeiwen.com/subject/rfvgottx.html