我在看Android的新ARCore库。它有一种检测水平表面但没有检测垂直表面或墙壁的方法。
我实际上是想让示例应用程序检测到墙壁,但我遇到了很多问题。
在ARCore中有原生或非原生检测垂直曲面的方法吗?
答案 0 :(得分:5)
<强>更新强>
现在最新版本的ARCore also has
public static final Config.PlaneFindingMode HORIZONTAL
// Detection of only horizontal planes is enabled.
public static final Config.PlaneFindingMode HORIZONTAL_AND_VERTICAL
// Detection of both horizontal and vertical planes is enabled.
OLD ANSWER
目前有no native way:
public static final Config.PlaneFindingMode DISABLED
// Plane detection is disabled.
public static final Config.PlaneFindingMode HORIZONTAL
// Detection of only horizontal planes is enabled.
草绘here非本地方式: 访问点云数据并自行计算水平平面。但为了使它真正起作用,你必须实现聚类(分开多个平面而不是计算一个全局平面)和适当的异常值拒绝(可能使用RANSAC)。
就我个人而言,我认为(希望)下一次ARCore更新将包括垂直平面,因为我无法看到不支持此数据的数学原因。
答案 1 :(得分:1)
获取hellosceneform样本并将其转换为检测垂直和水平平面:
https://github.com/google-ar/sceneform-android-sdk/tree/master/samples/hellosceneform
创建一个新的Fragment子类化ArFragment并重写getSessionConfiguration方法:
public class CustomArFrag extends ArFragment {
@Override
protected Config getSessionConfiguration(Session session) {
Config config = super.getSessionConfiguration(session);
config.setPlaneFindingMode(Config.PlaneFindingMode.HORIZONTAL_AND_VERTICAL);
return config;
}
}
更改activity_ux.xml布局以指向它:
<fragment
android:name="com.google.ar.sceneform.samples.hellosceneform.CustomArFrag"
.../>
请注意,并非总是可以检测到垂直表面。它似乎不喜欢大的白墙。它设法检测到冰箱的前部,而我却像磁铁一样将Android粘在冰箱上!
答案 2 :(得分:0)
ARCore 1.2为AR开发人员带来了三个新功能:Vertical Plane Detection
,Cloud Anchors
和Augmented Images
。
列表中的第一个功能为Config.PlaneFindingMode
添加了两个附加的Enum值:
public static final Config.PlaneFindingMode HORIZONTAL_AND_VERTICAL
public static final Config.PlaneFindingMode VERTICAL
让我们看看在真实的 Java 代码中的外观:
mArSession = new Session(this);
mArConfig = new Config(mArSession);
mArConfig.setPlaneFindingMode(Config.PlaneFindingMode.VERTICAL);
mArConfig.setUpdateMode(Config.UpdateMode.LATEST_CAMERA_IMAGE);
mArFragment.getArSceneView().setupSession(mArSession);
或者让我们看看真实的 Kotlin 代码中的样子:
mArSession = Session(this)
mArConfig = Config(this)
mArConfig?.planeFindingMode = Config.PlaneFindingMode.HORIZONTAL_AND_VERTICAL
mArConfig?.updateMode = Config.UpdateMode.LATEST_CAMERA_IMAGE
configure(mArConfig)
mArFragment.arSceneView.setupSession(this)
希望这会有所帮助。