[swift] Scenekit / ARkit上にdaeファイルからモデルを読み込んで追加する

Scenekit / ARkit上にdaeファイルからモデルを読み込んで追加するコードは以下の通り

インターネット上ではdaeファイルを追加するにはIDを指定してモデルデータを取得する必要があるとの記載が多いが、scene!.rootNode.childNodes[0]でモデルデータが取得できる。

これで複数のdaeファイルのモデルIDをいちいち記述する必要がなくなる。

ただし、xcodeでdaeファイル内のモデルIDの順番が一番上以外にあると、モデルが読み込めないので、必ずモデルIDが一番上になるようにしておくこと

 

↓これではモデルが読み込めないので、xcode上でドラッグアンドドロップで順番を入れ替えること

スクリーンショット 2017-09-26 7.14.54

↓入れ替えた後

スクリーンショット 2017-09-26 7.15.04

以下、ソースコード

override func viewDidLoad() {
        super.viewDidLoad()

        var scene = SCNScene() //カメラや光源などの設定は省略

        //ボールdaeファイルのパス
        let ball = "art.scnassets/gun.dae"

        //ガンモデルをシーンに追加
        scene.rootNode.addChildNode(createObject(position: SCNVector3Make(0, 0.1, 0), restitution: 1.0, filepath: ball))

}

    //daeモデルを生成
    func createObject(position:SCNVector3, restitution:CGFloat,filepath:String) -> SCNNode {
        let scene = SCNScene(named: filepath)
        let node: SCNNode = scene!.rootNode.childNodes[0]
        let aModelShape = SCNPhysicsShape(node: node, options: nil)
        let physicsBody = SCNPhysicsBody(type: .dynamic, shape: aModelShape)
        physicsBody.restitution = restitution
        node.physicsBody = physicsBody
        node.position = position
        
        return node
    }

ただしこのままだとテクスチャが貼られていないモデルが出現するので、xcode上でdaeファイルの出現させてたいモデルを選択

スクリーンショット 2017-09-26 7.10.16

右ペインの「Materials」という丸マークのタブを開き、「Diffuse」に貼りたいテクスチャを選択しておく。

 

コード上でnodeのmaterialでイメージを貼り付けても良い

let material = SCNMaterial()
material.diffuse.contents = UIImage(named: "art.scnassets/textures/handgun_C.jpg")
node.geometry?.firstMaterial = material

 

One thought on “[swift] Scenekit / ARkit上にdaeファイルからモデルを読み込んで追加する

  • 2020年3月4日 at 8:51 AM
    Permalink

    コードでテクスチャを貼るやり方を探していました!
    ぜんぜん見つからないところ、ここに来て助かりました
    ありがとうございます!

    Reply

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です