ARCore SDKを使用して、誰かがデバイスの前方の垂直面をリアルタイムで識別できるかどうか疑問に思いました。
一次方程式を使用して壁を定義することで、まともな結果を達成することができました。
z = Multiplier * x + Constant (For every y)
「foreveryy」コメントとは、壁を定義する線を計算するために、y軸(部屋の2Dマッピングのように上から壁を見る)を無視することを意味しました。
乗数は、ポイント間の回転です。
let angleDeg = Float((360 - angle + 360) % 360) * Float.pi / 180.0;
すべての計算は次のとおりです。
let angle: Int = Int((atan2(pointA.z - pointB.z, pointA.x - pointB.x) * 180) / Float.pi) % 360
yRotation = Float((360 - angle + 360) % 360) * Float.pi / 180.0
if pointA.x == pointB.x {
multiplier = Float.infinity
} else {
multiplier = (pointA.z - pointB.z) / (pointA.x - pointB.x)
}
constant = pointA.z - multiplier * pointA.x
}
ここで、ユーザーが歩き回っている間にその計算をトリガーし、多くの点群のポイントをサンプリングします。
結果は良好ですが、ARCoreの水平面検出ほど正確ではありません。
現在はARCoreの一部であり、Android用 バージョン1.2. でリリースされました
この問題は、公式のGoogle AR Core githubリポジトリで参照できます https://github.com/google-ar/arcore-unity-sdk/issues/31 。この機能は、ARCore SDK for unity(v1.2.0) SDK link でリリースされています。お役に立てれば :)
ARCore 1.2がリリースされて以来、Config.PlaneFindingMode
列挙の4つの値を使用できます。
コードは次のようになります。
public static final Config.PlaneFindingMode DISABLED
// Plane detection is disabled.
public static final Config.PlaneFindingMode HORIZONTAL
// Detection of only horizontal planes is enabled.
public static final Config.PlaneFindingMode VERTICAL
// Detection of only vertical planes is enabled.
public static final Config.PlaneFindingMode HORIZONTAL_AND_VERTICAL
// Detection of both horizontal and vertical planes is enabled.
お役に立てれば。