前提・実現したいこと
ARKitを使ってアプリを作っています。
ARFaceTrackingConfigurationで顔を映し、
let noseVertexID = 7 let noseVertex = faceAnchor.geometry.vertices[noseVertexID] nose.position = SCNVector3(noseVertex)
で鼻のワールド座標を返せるようになりました。
このとき、iphoneの画面内の鼻の座標を取得したいです。
最終的にやりたいことは、
画面内である範囲を指定し、その範囲の中に鼻が入っているかどうかを判断することです。
試したこと
func getScreenPointfromARPos(sceneView:ARSCNView , pos:SCNVector3) -> (x: Float, y: Float){ let screenPos = sceneView.projectPoint(pos) return (screenPos.x, screenPos.z) }
という関数を作成し、
let point = getScreenPointfromARPos(sceneView: sceneView,pos: nose.position) testLabel1.text = "point:x (point.x)" testLabel2.text = "point:y (point.y)"
というふうに使ってみました。
point.xとpoint.yで値は表示されるのですが、画面内に表示されている位置と値が合っていないような気がします。
たとえば、
view.frame.widthで画面の横サイズは414と分かったのですが、
point.xでは500やマイナスの値をとったりします。
画面上では同じあたりに鼻があっても、角度を変えたりすると値が大きく変わります。
わからないこと
ワールド座標をスクリーン座標に変換した値は、
iPhoneの画面内に表示されている(x, y)の位置とは違うのでしょうか。
よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/06 02:44
2020/11/06 02:56
2020/11/06 03:16
2020/11/06 03:39 編集
2020/11/06 16:35
2020/11/09 00:39