2017-04-01 2 views
1

FRAGEN 1:SceneKit eigene Formen für komplexe ".DAE" Objekte

-Code Kollision mit elementarem Objekt zu machen - Rohr funktioniert nicht richtig:

let tubeGeometry = SCNTube(innerRadius: 2, outerRadius: 2.5, height: 2) 
    let tubeMaterial = SCNMaterial() 
    tubeMaterial.diffuse.contents = UIColor.green 
    tubeGeometry.materials = [tubeMaterial] 

    let tubeNode = SCNNode(geometry: tubeGeometry) 
    tubeNode.position = SCNVector3(0, 0, 0) 

    let tubeShape = SCNPhysicsShape(geometry: tubeGeometry, options: nil) 
    let tubeBody = SCNPhysicsBody(type: .dynamic, shape: tubeShape) 

    tubeNode.physicsBody?.categoryBitMask = collisionTube 
    tubeNode.physicsBody?.collisionBitMask = collsionTarget 
    tubeNode.physicsBody?.mass = 1 
    tubeNode.physicsBody = tubeBody 

    scene.rootNode.addChildNode(tubeNode) 

Screenshot:

TUBE COLLISION

Warum Bälle auf der Oberseite des Objekts ist?

FRAGE 2:

ich das Handbuch sorgfältig lesen Sie die Klassen SCNPhysicsShape und SCNPhysicsBody

Recherchiert alle Möglichkeiten zur Einführung Einschränkungen auf die DAE Objekte zu verwenden. Und kam zu dem Schluss, dass alle Einschränkungen komplexe Bündel von SCNNodes in einem einzigen physikalischen Modell des Objekts programmiert werden müssen.

gefunden sehr interessante Antwort:

LINK

Ich hoffe wirklich, es eine Möglichkeit, wie gemacht etwas lassen DAEShape = SCNPhysicsShape (Geometrie: "* .DAE") ..., sonst wird die Das Setzen von Kollisionen auf komplexe Objekte kann einen Monat oder mehr dauern.

Zum Beispiel, wie Kollisionen der komplexen Rohr "DAE" -Objekt, wie im Screenshot, irgendwelche Ratschläge? DAE OBJECT - COMPLEX TUBE

Die Frage ist nicht über die Leistung eher die Fähigkeit, komplexe Einschränkungen zu implementieren, um komplexer 3D den direkteste Weg, um Objekte, die lästige Pflicht der Programmierung zu vermeiden ...

Wie Physic Abhängigkeiten setzen, die die Eckpunkte mit Kanten und Gesichter des "DAE" -Objekts?

Ich hoffe wirklich, dass die Antwort wird ... Vielen Dank im Voraus!

Antwort

0
let url = Bundle.main.url(forResource: "art.scnassets/half", withExtension: "dae") 
    let sceneSource = SCNSceneSource(url: url!, options: nil) 
    let tubeGeometry = (sceneSource?.entryWithIdentifier("Cube-mesh", withClass: SCNGeometry.self))! as SCNGeometry 

    tubeNode = SCNNode(geometry: tubeGeometry) 
    tubeNode.position = SCNVector3(0, 1, 0) 
    tubeNode.eulerAngles = SCNVector3Make(1.5, 2, 0) 
    tubeNode.physicsBody = SCNPhysicsBody(type: .static, shape: SCNPhysicsShape(geometry: tubeGeometry, options: [SCNPhysicsShape.Option.type: SCNPhysicsShape.ShapeType.concavePolyhedron])) 
    scene.rootNode.addChildNode(tubeNode)