首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SceneKit中可视化三维模型拆卸

在SceneKit中可视化三维模型拆卸
EN

Stack Overflow用户
提问于 2019-01-30 10:04:21
回答 1查看 153关注 0票数 0

我试图创建一个使用SceneKit拆解3D模型的错觉。它应该看上去像像这样

假设模型是由许多小部件组成的机械部件,我想将模型的部件“拆开”动画化,类似于下面演示中的“反汇编”按钮:

https://camentos.github.io/dtool

在我看来,我需要从物体的中心以某种方式制造一个“爆炸”,这样这些部分就会远离中心,但是我不知道在哪个方向上应该施加力。模型各部分的力值、方向值和质量值是否不同?

到目前为止,我所做的是遍历模型中的所有孩子,给他们附加一个.dynamic型的物理体,给他们一个质量,然后一个一个地给所有的孩子施加力量。为了制造零件在拆卸后冻结在空气中的错觉,我用计时器在几毫秒后清除部件上的所有力,以阻止它们完全飞走。

在此提出了一个类似的解决办法,作为一种回答:

在Unity3D中动画化三维物体拆卸

我试着用重力将F=ma作为力施加到所有部件,并给每个部分分配一个随机质量,但是当模型非常大时,部件会以一种非常抖动/滞后的方式移动,如果模型较小,它们就会完全飞走。

代码语言:javascript
复制
        let physicsBody = SCNPhysicsBody(type: .dynamic, shape: nil)
        node.physicsBody = physicsBody
        let randomMass = Float.random(in: 1..<10)
        node.physicsBody?.mass = CGFloat(randomMass)
        let force = Double(randomMass)*(9.8)
        let direction = SCNVector3(0, force, 0)
        node.physicsBody?.applyForce(direction, asImpulse: true)
        node.physicsBody?.isAffectedByGravity = false



        DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(500)) {
            node.physicsBody?.clearAllForces()
            node.physicsBody?.isAffectedByGravity = false
        }

我很难想出力、方向和质量的正确值。到目前为止,给每个部分一个巨大的质量(对所有人来说都是相同的质量)和施加一个非常小的力似乎更好,但我不确定我是否走上了正确的道路。

根据每个模型使用硬编码的预先确定的值是否是正确的处理方法?任何提示都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2019-02-04 17:07:05

我不使用物理引擎,而是根据节点的边界框和初始位置对齐节点。很容易将它们都放在x方向上,并根据包围框的x大小来设置它们之间的距离。如果你想要动画,你可以使用移动动作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54437899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档