Как масштабировать и позиционировать SCNNode, к которому прикреплен SCNSkinner? - PullRequest
0 голосов
/ 04 июля 2019

Используя SceneKit, я загружаю очень простой .dae файл , состоящий из большого цилиндра с тремя связанными костями. Я хочу уменьшить цилиндр и расположить его на земле. Вот код

public class MyNode: SCNNode {

    public convenience init() {
        self.init()

        let scene = SCNScene(named: "test.dae")

        let cylinder = (scene?.rootNode.childNode(withName: "Cylinder", recursively: true))!

        let scale: Float = 0.1
        cylinder.scale = SCNVector3Make(scale, scale, scale)
        cylinder.position = SCNVector3(0, scale, 0)

        self.addChildNode(cylinder)
    }
}

Это не работает; цилиндр все еще огромен, когда я его вижу. Единственный способ заставить код работать - это удалить связанные SCNSKinner.

cylinder.skinner = nil

Почему это происходит и как правильно масштабировать и позиционировать модель, кости и все такое?

1 Ответ

2 голосов
/ 04 июля 2019

когда геометрия снята, она управляется своим скелетом. Это означает, что преобразование скинового узла больше не используется, важны преобразования костей.

Для этого файла Armature является корнем скелета. Если вы переведете / масштабируете этот узел вместо Cylinder, вы получите то, что хотите.

...