在可视化3D SceneKit拆装模型

问题描述 投票:0回答:1

我试图创建拆卸使用SceneKit 3D模型的错觉。它应该看起来like this

假设模型是一台机器,它由许多小的部分,我想动画模型的零件被“拉开”类似的拆卸在下面的演示所有按钮:

https://camentos.github.io/dtool

在我看来,我需要以某种方式创建的对象中心的“爆炸”,因此部分将远离中心搬走,但我不知道在哪个方向的力应适用于这一点。如果力值,方向和质量值是对模型的所有部分有什么不同?

我要做到目前为止遍历模型的所有儿童,附加类型。动态给他们的身体物理,给他们一个肿块,并施加力,所有的孩子一个接一个。要创建冻结在空气中分解后零件的错觉,我使用计时器来清除零件全部力量后几毫秒到飞走完全阻止他们。

类似的解决方案建议如下回答:

Animate 3D object disassembly in Unity3D

我试图利用重力将F = MA为力量,以各地和各部分分配随机质量,但是当模型是非常大的,这些部件在一个非常紧张的/ laggy的方式移动,如果模型是小,他们刚刚飞走完全。

        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
        }

我在与想出的力量,方向和质量正确的价值观麻烦。到目前为止,给每个部分(对于所有和相同的质量),巨大的肿块,并施加一个很小的力似乎是更好的工作,但我不知道我在正确的道路。

根据每个所讨论的模型来处理这个正确的方式使用硬编码预先确定的值?任何提示将非常感谢!

ios swift scenekit arkit
1个回答
0
投票

而不是使用物理引擎的我会整理和调整基于其边界框和初始位置的节点。这将是很容易把他们都在一排在X方向,并根据边界框的x大小设置它们之间的距离。如果你想它的动画,你可以使用移动的动作。

© www.soinside.com 2019 - 2024. All rights reserved.