gpt4 book ai didi

android - ARCore 屏幕坐标到世界坐标 openGL

转载 作者:行者123 更新时间:2023-11-29 01:06:01 24 4
gpt4 key购买 nike

我正在尝试放置一个 anchor 并将其显示在用户点击屏幕的位置,这会返回 X 和 Y 坐标。

tapX = tap.getX();
tapY = tap.getY();

我想使用这些信息为我的模型创建一个矩阵。 (即,将我的 3D 模型放在用户点击的位置)

现在我尝试了:

 float sceneX = (tap.getX()/mSurfaceView.getMeasuredWidth())*2.0f - 1.0f;
float sceneY = (tap.getY()/mSurfaceView.getMeasuredHeight())*-2.0f + 1.0f; //if bottom is at -1. Otherwise same as X
Pose temp = frame.getPose().compose(Pose.makeTranslation(sceneX, sceneY, -1.0f)).extractTranslation();

我现在只是将 3D 对象放在前面 1 米处。我没有得到正确的位置。

有没有办法将本地坐标转换为世界坐标?

最佳答案

屏幕上的点击与现实世界没有一对一的映射。它为您提供无限数量的可能 (x, y, z) 位置,这些位置沿着从相机延伸的光线。例如,如果我点击屏幕中央,这可能对应于一个漂浮在离我一米远、两米远、在地板上、穿过地板等的物体。

因此,您需要一些额外的约束来告诉 ARCore 沿着这条射线在何处放置 anchor 。在示例应用程序中,这是通过将此射线与 ARCore 检测到的平面相交来完成的。与平面相交的射线描述了一个点,所以你已经准备好了。这是他们在示例应用程序中的做法:

    MotionEvent tap = mQueuedSingleTaps.poll();
if (tap != null && frame.getTrackingState() == TrackingState.TRACKING) {
for (HitResult hit : frame.hitTest(tap)) {
// Check if any plane was hit, and if it was hit inside the plane polygon.
if (hit instanceof PlaneHitResult && ((PlaneHitResult) hit).isHitInPolygon()) {
// Cap the number of objects created. This avoids overloading both the
// rendering system and ARCore.
if (mTouches.size() >= 16) {
mSession.removeAnchors(Arrays.asList(mTouches.get(0).getAnchor()));
mTouches.remove(0);
}
// Adding an Anchor tells ARCore that it should track this position in
// space. This anchor will be used in PlaneAttachment to place the 3d model
// in the correct position relative both to the world and to the plane.
mTouches.add(new PlaneAttachment(
((PlaneHitResult) hit).getPlane(),
mSession.addAnchor(hit.getHitPose())));

// Hits are sorted by depth. Consider only closest hit on a plane.
break;
}
}
}

特别是对于您的情况,我会看一下 the rendering code适用于 AR 绘图应用程序。它们的函数 GetWorldCoords() 假定距屏幕的距离已知,从屏幕坐标到世界坐标。

关于android - ARCore 屏幕坐标到世界坐标 openGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47140190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com