質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ARKit

ARKitは、iPhone/iPad向けのARアプリ用フレームワーク。iOS11以降に標準搭載されています。これを用いたARアプリは、特殊なデバイスがなくてもiPhone/iPadの単眼カメラを使用して動作することが可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

3DCG

コンピュータの演算により、3次元空間の仮想物体を、2次元平面上で表現する手法である。

Q&A

解決済

1回答

477閲覧

分裂している3Dオブジェクトの表示方法

hodoru3sei

総合スコア284

ARKit

ARKitは、iPhone/iPad向けのARアプリ用フレームワーク。iOS11以降に標準搭載されています。これを用いたARアプリは、特殊なデバイスがなくてもiPhone/iPadの単眼カメラを使用して動作することが可能です。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

3DCG

コンピュータの演算により、3次元空間の仮想物体を、2次元平面上で表現する手法である。

0グッド

0クリップ

投稿2018/10/23 13:50

編集2018/10/24 11:19

Bowl of Ramenこのサイトから3Dオブジェクトをお借りして、ARkitを使ってラーメンのモデルを表示しようとしたのですが、3Dオブジェクトがラーメンの具材や、器、レンゲなど細かく分離されてしまっていて、Identityに名前をつけて呼び出しても3Dモデルの一部しか呼び出すことができません。
画像はscnファイルを開いてモデルをクリックした時のものです、チャーシューの部分しか選択できていません。
image
分離している3Dモデルを1つのオブジェクトとして表示させることはできるのでしょうか?
またはXcode内で1つのオブジェクトに変換できたりするのでしょうか?
それともMayaのようなソフトで3Dオブジェクトを加工するしか無いのでしょうか?

※追記
ラーメンのオブジェクトを追加しているコードは下記になります。
tapされたらオブジェクトが落ちてくるイメージです。

Swift

1func addRamen(hitResult: ARHitTestResult){ 2 guard let scene = SCNScene(named: "model.scn", inDirectory: "Ramen", options: nil) else {fatalError()} 3 guard let ramenNode = scene.rootNode.childNode(withName: "Ramen", recursively: true) else {fatalError()} 4 5 let (min, max) = ramenNode.boundingBox 6 let w = CGFloat(max.x - min.x) 7 8 let magnification = 0.1 / w 9 ramenNode.scale = SCNVector3(magnification, magnification, magnification) 10 //nodeのポジションを設定 11 ramenNode.position = SCNVector3(hitResult.worldTransform.columns.3.x, hitResult.worldTransform.columns.3.y + 0.20, hitResult.worldTransform.columns.3.z) 12 13 //重力 14 let shape = SCNPhysicsShape(node: ramenNode, options: nil) 15 let gravity = SCNPhysicsBody(type: .dynamic, shape: shape) 16 gravity.restitution = 1 17 //重力をラーメンに設定 18 ramenNode.physicsBody = gravity 19 sceneView.scene.rootNode.addChildNode(ramenNode) 20 }

実際のビルド時の画像がこちらになります。モデルの一部?だけが落下してきます。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

例えば分離されていたとしても一つ親のSCNNodeのchildNodeとして、具材や、器、レンゲなどがくっついている形であれば、親のSCNNodeを置けば1つのオブジェクトとして出せるはずです。

また、 https://3dwarehouse.sketchup.com/model/u6a8fa04c-3589-4d50-bb48-c0b68596a19a/Bowl-of-Ramen のサイトから.daeの形式でダウンロードできますが、その.daeをそのままXcodeでSCNSceneとして読みこんで表示できるはずです。

現状のソースコードやscnファイルを共有していただければ、もっとアドバイスできるかもです!

投稿2018/10/23 14:20

KBOY

総合スコア54

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hodoru3sei

2018/10/24 11:29 編集

Nodeを追加している部分のソースコードと実行時のスクリーンショットを追記しました。 scnに関してはどう置けば良いのかわからなかったので乗せられていません。 >>その.daeをそのままXcodeでSCNSceneとして読みこんで表示できるはずです。 scnファイルに変換しなくてもそのまま使えるのでしょうか?モデルを入れ直して試してみましたが、私がやった限りではできませんでした... scene.rootNode.childNodeのwithNameの部分がどうたらいいのかわかっていないので、できていないんだと思います。オブジェクトが分離していたのでそれぞれのモデルのIdentityのNameをRamenに統一したんですが、だめでした。 コードは、前にKBOYさんに質問させていただいたニンニクのモデルに差し替えて使って、タップをすると問題なく3Dモデルが表示できています。
KBOY

2018/10/25 05:01 編集

ちなみにdaeはSCNSceneの別のイニシャライザで読み込めるとは思います。 以下の堤さんの記事のudszはdaeやobjでもできるものなので。 https://qiita.com/shu223/items/84cc00802399c381aefe とはいえ今回はそこが論点ではないと思うので、まず、 ``` guard let ramenNode = scene.rootNode.childNode(withName: "Ramen", recursively: true) else {fatalError()} ``` を ``` let ramenNode = scene.rootNode ``` に変更して試してどうなるか確認していただけますか? 全てのchildNodeがくっついた親のnodeごと取得できるはずです。
hodoru3sei

2018/10/25 10:33

let ramenNode = scene.rootNode に置き換えて試したところ全部表示することができました! ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問