专栏首页每日一篇技术文章SceneKit-你其实不懂模型的物理身体

SceneKit-你其实不懂模型的物理身体

本节学习目标

1.如何查看几何模型物理身体 2.如何设置几何模型的物体身体形态 3.如何给几何模型自定义物体身体

如何查看几何模型的物理身体长什么样子呢?

scnView.debugOptions = .showPhysicsShapes// 打开调试模型即可

我们给物理身体设置一下动态物理身体查看一下模型的物理身体到底长是什么样子,下面以一个球体为例

sphereNode.physicsBody = SCNPhysicsBody.dynamic()

效果如下图,绿线的几何样子即模型的物体身体的形态,我们可以发现球体的物理身体和模型一致

gif1.gif

下面介绍SCNPhysicsBody一个初始化方法可以动态的改变物体身体的形态

public convenience init(type: SCNPhysicsBodyType, shape: SCNPhysicsShape?)

第一个参数 可以选择 static ,dynamic,kinematic 物理身体的类型 第二个参数 物理身体的形状

下面讲解一个物理身体形状的创建

1.形状的类型(.boundingBox)

通俗的将就是盒子形状的物理身体,如果你的模型是个球体,那么它的物理身体将会是一个外切的正方体,如下图

let shape = SCNPhysicsShape(geometry: sphereNode.geometry!, options: [SCNPhysicsShape.Option.type:SCNPhysicsShape.ShapeType.boundingBox])

gif2.gif

2.形状的类型(.凸面体)

物体身体的形状将会是一个凸面体

let shape = SCNPhysicsShape(geometry: sphereNode.geometry!, options: [SCNPhysicsShape.Option.type:SCNPhysicsShape.ShapeType.convexHull])

gif3.gif

3.形状的类型(.凹面体)

物理身体将会是一个凹面体

let shape = SCNPhysicsShape(geometry: sphereNode.geometry!, options: [SCNPhysicsShape.Option.type:SCNPhysicsShape.ShapeType.concavePolyhedron])

gif4.gif

发现没有和底面发生碰撞,为什么会这样,当凹面和地板接触时,物体已经插入地板力,碰撞此时已失效,所以我们千万不要讲凸面的物体设置成凹面物理身体

下面我们给球体自定义一个正方体的物理身体,主要把代码完整代码记录一下

    let sphereNode = SCNNode()
    sphereNode.geometry = SCNSphere(radius: 1)
    sphereNode.position = SCNVector3Make(0, 10, -20)
    sphereNode.geometry?.firstMaterial?.diffuse.contents = "box.gif"
    let box = SCNBox(width: 4, height: 4, length: 4, chamferRadius: 0)
    let shape = SCNPhysicsShape(geometry: box, options: [SCNPhysicsShape.Option.type:SCNPhysicsShape.ShapeType.convexHull])
    sphereNode.physicsBody = SCNPhysicsBody(type: .dynamic, shape: shape)
    self.scnView.scene?.rootNode.addChildNode(sphereNode)

效果如下

gif5.gif

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Swift3.0 - 集合

    酷走天涯
  • Java_ 介绍_01

    Java语言为了实现上述所说的目标,使用了下面三个东西 1.Java 虚拟机(JVM) 2.垃圾回收机制 3.Java 运行环境(JRE) 接下来分别讲...

    酷走天涯
  • Swift3.0 - 类簇

    酷走天涯
  • scrollHook Vue 滚动监听钩子

    copy_left
  • watch.js 源码解读

    用麻雀虽小五脏俱全来描述Watch.js比较合适。“观察者”模式是我们在开发的时候经常需要用到的。使用Watch.js那么我们就可以实现在“每当对象属性改变的时...

    mmzhou
  • Spark Streaming基于网络的词频统计

    ZHANGHAO
  • 动态:人工智能的核心技术就是让机器学习

    5月26日上午,由深圳市人民政府和广东院士联谊会主办,新华网、深圳市坪山新区管理委员会联合主办,深圳市科技创新委员会协办的新华网思客会人工智能+产业创新与发展论...

    昱良
  • 一套测试用例如何实现支持多个环境运行

    一款需要正式对外发布的产品,通常都需要经历一个较完整的测试验证过程,在整个产品质量验证阶段,一般会经历几类测试环境的验证:从产品集成阶段的测试环境->验收阶段的...

    测试开发技术
  • 去年一年增长翻倍,高德地图的诀窍是什么?

    如果将2007年iPhone诞生视作元年,迄今为止移动互联网已发展近十年。绝大多数基础平台类App都圈地完成,市场趋于稳定。新兴应用更多是出现在O2O、内容消费...

    罗超频道
  • 带你了解伪造地址和反射点造成的DDOS怎么处理?

    在现阶段的移动互联网环境中,除了僵尸网络能够在网络中造成不同形式的攻击外,伪造地址与反射点在网络中发起的攻击也是不容忽视的。如在DDoS攻击中,出现的这两种现象...

    墨者安全科技

扫码关注云+社区

领取腾讯云代金券