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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

ARKit

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

Pythonista

Pythonistaは、iOS上でPythonプログラミングができる開発アプリです。さらに、Pythonの関数・変数などを自動で補完する便利なコードエディタや、PythonスクリプトをiOS上で多様な形で機能させる各種機能も内包しています。

iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

AR(Augmented Reality)

AR(Augmented Reality)とは、拡張現実のことです。人が認識する現実の環境で視覚・聴覚などの知覚が感知する情報をコンピュータで拡張する技術、もしくはその環境そのものを表す言葉です。

Q&A

0回答

1338閲覧

PythonistaからScenekitを使って絶対位置を指定して文字列をAR表示させたい

mit.F

総合スコア0

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

ARKit

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

Pythonista

Pythonistaは、iOS上でPythonプログラミングができる開発アプリです。さらに、Pythonの関数・変数などを自動で補完する便利なコードエディタや、PythonスクリプトをiOS上で多様な形で機能させる各種機能も内包しています。

iPad

iPadは、Appleがデザインしたタブレット型コンピュータです。iPadアプリケーションは通常Xcode IDEのObjective-Cで書かれますが、iPadアプリケーションを組むためのほかのツールを使うことも可能です。

AR(Augmented Reality)

AR(Augmented Reality)とは、拡張現実のことです。人が認識する現実の環境で視覚・聴覚などの知覚が感知する情報をコンピュータで拡張する技術、もしくはその環境そのものを表す言葉です。

0グッド

0クリップ

投稿2020/07/28 08:53

前提・実現したいこと

Pyhtonistaのobjc_utilからSceneKit、ARKitを使って文字列をARとして表示させたいと考えています。
具体的には、ワールド座標系で絶対位置を指定し、その地点に固定させて文字列を表示させたいです。
サンプルコードを書き換え、自分の使いたいものが出せないか試しているところです。

発生している問題・エラーメッセージ

何故かNode.setPosition_メソッドを使う際にcm単位でしか指定ができず、カメラからの相対位置が固定された状態で表示されてしまいます。 カメラを動かすと表示させたい文字列も動いてしまい、使い物にならない状態です。

該当のソースコード

Pythonista3

1from objc_util import * 2import ui 3 4load_framework('SceneKit') 5load_framework('ARKit') 6 7SCNScene=ObjCClass('SCNScene') 8SCNView=ObjCClass('SCNView') 9SCNNode=ObjCClass('SCNNode') 10SCNCamera=ObjCClass('SCNCamera') 11UIColor=ObjCClass('UIColor') 12SCNText=ObjCClass('SCNText') 13SCNBox=ObjCClass('SCNBox') 14UIFont=ObjCClass('UIFont') 15 16ARWorldTrackingConfiguration=ObjCClass('ARWorldTrackingConfiguration') 17ARSCNView=ObjCClass('ARSCNView') 18ARSession=ObjCClass('ARSession') 19 20class SCNVector3(Structure): 21 _fields_=[('x', c_float),('y', c_float),('z', c_float)] 22 23class MainView(ui.View): 24 def __init__(self,*args,**kwargs): 25 self.bg_color='red' 26 f = CGRect(CGPoint(0, 0), CGSize(self.width, self.height)) 27 flex_width, flex_height = (1<<1), (1<<4) 28 29 selfIns=ObjCInstance(self) 30 31 s_view=ARSCNView.alloc().initWithFrame_options_(f, None).autorelease() 32 s_view.setAutoresizingMask_(flex_width|flex_height) 33 #s_view.delegate=selfIns 34 s_scene=SCNScene.scene() 35 s_view.scene=s_scene 36 s_view.showsStatistics=1 37 38 text_obj=SCNText.textWithString_extrusionDepth_('hello', 0.01) 39 text_obj.material().setColor_(UIColor.redColor().CGColor()) 40 bbox_min, bbox_max=SCNVector3(), SCNVector3() 41 tNode=SCNNode.nodeWithGeometry_(text_obj) 42 tNode.getBoundingBoxMin_max_(byref(bbox_min),byref(bbox_max),restype=None,argtypes=[POINTER(SCNVector3), POINTER(SCNVector3)]) 43 text_width=(bbox_max.x - bbox_min.x) 44 text_height=(bbox_max.y - bbox_min.y) 45 text_container=SCNNode.node() 46 text_container.addChildNode_(tNode) 47 tNode.setPosition_(((-text_width/2), (-text_height/2), -1)) 48 text_container.setPosition_((0, 0, -10)) 49 s_scene.rootNode().addChildNode_(text_container) 50 51 ar_cnfg = ARWorldTrackingConfiguration.new() 52 ar_session=ARSession.new() 53 ar_session.delegate=selfIns 54 ar_session.runWithConfiguration_(ar_cnfg) 55 s_view.setSession_(ar_session) 56 57 selfIns.addSubview_(s_view) 58 59v=MainView() 60v.present()

試したこと

本家Objective-CのSceneKitドキュメントにあるようにSCNVector3で位置を指定しようとしましたがエラーが出てできませんでした。
また、SCNBoxを使って試してみたところ、Boxは各辺の長さを小数で指定すると辺の長さ及びsetPositionがm単位での指定になり絶対位置が固定できることがわかりました。辺の長さを整数で指定すると辺の長さとsetPositionがcm単位での指定となってしまいカメラとの相対距離が固定され絶対位置が指定できなくなってしまいます。
SCNTextでも同様に小数指定でなんとかならないかと試してみましたが、私がやった限りではダメそうでした。
解決できるアイデアがあれば教えていただけると幸いです。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問