前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SceneKit-你其实不懂模型的物理身体

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

作者头像
酷走天涯
发布2019-06-15 11:11:09
6910
发布2019-06-15 11:11:09
举报

本节学习目标

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

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

代码语言:javascript
复制
scnView.debugOptions = .showPhysicsShapes// 打开调试模型即可

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

代码语言:javascript
复制
sphereNode.physicsBody = SCNPhysicsBody.dynamic()

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

gif1.gif

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

代码语言:javascript
复制
public convenience init(type: SCNPhysicsBodyType, shape: SCNPhysicsShape?)

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

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

1.形状的类型(.boundingBox)

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

代码语言:javascript
复制
let shape = SCNPhysicsShape(geometry: sphereNode.geometry!, options: [SCNPhysicsShape.Option.type:SCNPhysicsShape.ShapeType.boundingBox])

gif2.gif

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

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

代码语言:javascript
复制
let shape = SCNPhysicsShape(geometry: sphereNode.geometry!, options: [SCNPhysicsShape.Option.type:SCNPhysicsShape.ShapeType.convexHull])

gif3.gif

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

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

代码语言:javascript
复制
let shape = SCNPhysicsShape(geometry: sphereNode.geometry!, options: [SCNPhysicsShape.Option.type:SCNPhysicsShape.ShapeType.concavePolyhedron])

gif4.gif

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

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

代码语言:javascript
复制
    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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.09.19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档