[Swift]3DモデルをSCNSceneに変換する方法2つ
Swiftで3DモデルをSCNSceneに変換するにはModelIOを経由する方法とscnファイルを作成する方法の2つがあります。
片方を実装するともう片方を忘れることが多くてその度に調べることになっているので、備忘録として残しておきます。
前提条件は以下の通りです。
- Swift 5
- Xcode 11.7
- iOS 13.7
ModelIOを経由する方法
ModelIOのMDLAssetを使い、そこからSCNSceneを読み込みます。
最初にModelIOをimportしておきましょう。注意点としては本体ではなくSceneKitの方にあるものをimportすることです。
import SceneKit.ModelIO
変換したい3Dモデルはプロジェクトに追加しておきます。
階層はどこでもいいですが複数の3Dモデルを使うのであればちゃんと1つのディレクトリにまとめておく方がいいでしょう。
今回は"hoge.usdz"という3Dモデルを追加しているものとしています。
あとはBundleから3DモデルのURLを取得して、そのURLをもとにMDLAssetを作成し、作成したMDLAssetからSCNSceneに変換します。
guard let url = Bundle.main.url(forResource: "hoge", withExtension: "usdz") else { return }
let asset = MDLAsset(url: url)
let scene = SCNScene(mdlAsset: asset)
URL取得時のforResourceにはファイル名を、withExtensionには拡張子を指定します。
今回はusdz形式ですがobjでもgltfでも大丈夫です。
scnファイルを作成する方法
コードで実装せず最初からscnファイルを作成しておく方法です。
まずはModelIOを経由する方法と同じように3Dモデルをプロジェクトに追加します。
その後追加した3Dモデルを選択した状態で、Xcode上部のメニューにあるEditorから Convert to SceneKit file format (.scn)を実行します。
するとプロジェクトに3Dモデルのファイルと同名の.scnファイルが追加されます。
例)hoge.usdz → hoge.scn
このscnファイルをSCNSceneで直接読み込みます。
let scene = SCNScene(named: "hoge.scn")
どちらの方法でも難しいところはありませんが、ModelIOをimportしたりMDLAssetを作成する手間を考えると、scnファイルを作成する方法が便利ではないかと思います。
Author And Source
この問題について([Swift]3DモデルをSCNSceneに変換する方法2つ), 我々は、より多くの情報をここで見つけました https://qiita.com/y_taka/items/526ce2b6f18ef8eb2d4b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .