如何将.dae文件导入到场景中,只需更改其位置

时间:2016-07-29 17:49:58

标签: ios swift xcode scenekit

我从blender导出的dae文件。 (Blender是用于制作3D对象和动画的软件)。问题是当我将.dae文件添加到场景工具包中的场景时。盒子会出现,但就是这样。即使使用下面的代码,我仍然无法操纵Box甚至做一些简单的操作,比如设置其位置或向上或向下缩放。就像它拒绝所有的东西,除了它可以放在场景中的事实。所以我决定制作一个测试对象进行操作。我把它称为“sphere1”,我可以通过代码在所有方面对其进行操作。但是.dae文件根本不会做任何事情。

代码:

这是测试圈的好处,这里球体有一个物理体,我可以缩放它并改变它的位置。它甚至落到我设定为-9.8的重力上

    var sphere1: SCNNode!
    let sphereGeometry = SCNSphere(radius: 4.5)
    let sphereMaterial = SCNMaterial()
    let collisionCapsuleRadius = CGFloat(3.0)
    let collisionCapsuleHeight = CGFloat(3.0)
    sphereMaterial.diffuse.contents = UIColor.greenColor()
    sphereGeometry.materials = [sphereMaterial]
    sphere1 = SCNNode(geometry: sphereGeometry)
    sphere1.position = SCNVector3(x: 20.0, y: 10.0, z: 0.05)
    sphere1.physicsBody?.mass = 1
    sphere1.physicsBody?.rollingFriction = 0

    //----Giveing it a physics---------
    sphere1.physicsBody = SCNPhysicsBody(type: .Dynamic, shape:SCNPhysicsShape(geometry: SCNCapsule(capRadius: collisionCapsuleRadius, height: collisionCapsuleHeight), options:nil))
    sphere1.physicsBody?.affectedByGravity = true
    sphere1.physicsBody?.friction = 0
    sphere1.physicsBody?.restitution = 1 //bounceness of the object
    sphere1.physicsBody?.angularDamping = 1 // rotationess
    scnView.scene!.rootNode.addChildNode(sphere1)

这是“盒子”,我甚至不能改变它的位置都是简单的缩放它。

    let TestBox = SCNScene(named: "art.scnassets/TestCube.dae")
    let Box: SCNNode = TestBox!.rootNode.childNodeWithName("Cube", recursively: true)!
    Box.position = SCNVector3(x: 0.0, y: -30.0, z: 0.0)
    Box.scale = SCNVector3Make(100, 100, 100)
    scnView.scene!.rootNode.addChildNode(Box)

只是为了分享它导入的所有.dae文件的问题,而不仅仅是我早期导入的那个。我导入了另一个.dae / .scn文件,看看我是否可以操作它,但仍然没有运气。

     let GuyScene = SCNScene(named: "art.scnassets/FoxMan2.scn")
    let Guy: SCNNode = GuyScene!.rootNode.childNodeWithName("Guy", recursively: true)!
    let collisionCapsuleRadius2 = CGFloat(0.1)
    let collisionCapsuleHeight2 = CGFloat(0.1)
    Guy.position = SCNVector3(x: 0.0, y: 30.0, z: 0.0)
    Guy.scale = SCNVector3Make(100, 100, 100)
    Guy.rotation = SCNVector4Make(0, 1, 0, 1 )
    //----Giveing it a physics---------
    Guy.physicsBody = SCNPhysicsBody(type: .Dynamic, shape:SCNPhysicsShape(geometry: SCNCapsule(capRadius: collisionCapsuleRadius2, height: collisionCapsuleHeight2), options:nil))
    Guy.physicsBody?.affectedByGravity = true
    Guy.physicsBody?.friction = 0 //
    Guy.physicsBody?.restitution = 1 //bounceness of the object
    Guy.physicsBody?.angularDamping = 1 // rotationess
    Guy.physicsBody?.mass = 1
    Guy.physicsBody?.rollingFriction = 0

    GuyScene!.rootNode.addChildNode(Guy)
    scnView.scene!.rootNode.addChildNode(Guy)

0 个答案:

没有答案