java - 如何在 Scenform (AR CORE) 中将屏幕触摸坐标添加到现实世界?
问题描述
我想将图像添加到 AR 视图。我可以在渲染飞机时添加图像。但即使没有渲染的平面,我也想添加。我想将它添加到 AR 视图的真实世界位置——我实际上想将该触摸点转换为 AR 视图的世界位置。
List<HitResult> hitResult = frame.hitTest(motionEvent);
if (hitResult.size() != 0) {
//This code works fine
HitResult hit = hitResult.get(0);
Anchor anchor = hit.createAnchor();
AnchorNode anchorNode = new AnchorNode(anchor);
anchorNode.setParent(arFragment.getArSceneView().getScene());
anchors.add(anchor);
} else {
//This is not Working
if (arFragment.getArSceneView().getSession() != null) {
Anchor anchor = arFragment.getArSceneView().getSession().createAnchor(frame.getCamera().getPose().compose(Pose.makeTranslation(0, 0, -1f)).extractTranslation());
AnchorNode anchorNode = new AnchorNode(anchor);
anchorNode.setParent(arFragment.getArSceneView().getScene());
anchors.add(anchor);
if (drawingText.equalsIgnoreCase("imagearrow")) {
addArrow(anchorNode, arrowType, arrowColor);
}
}
}
我没有在 AR 视图中获得触摸点的确切位置。
解决方案
经过大量的工作,我能够找到答案。您必须根据相机的射线位置创建姿势,并且必须根据您的相机位置和相机的射线点计算位置和旋转。
Camera camera = arFragment.getArSceneView().getScene().getCamera();
Ray ray = camera.screenPointToRay(motionEvent.getX(), motionEvent.getY());
Vector3 drawPoint = ray.getPoint(1f);
Log.d("HELLODRWAPOINT", String.valueOf(drawPoint.x));
ArSceneView arSceneView = arFragment.getArSceneView();
com.google.ar.core.Camera coreCamera = arSceneView.getArFrame().getCamera();
if (coreCamera.getTrackingState() != TrackingState.TRACKING) {
return;
}
float[] position = { drawPoint.x, drawPoint.y, drawPoint.z};
float[] rotation = { camera.getWorldRotation().x,camera.getWorldRotation().y,camera.getWorldRotation().z, camera.getWorldRotation().w };
Session session = arFragment.getArSceneView().getSession();
Anchor anchor = session.createAnchor(new Pose(position, rotation));
AnchorNode anchorNode = new AnchorNode(anchor);
anchorNode.setParent(arFragment.getArSceneView().getScene());
anchors.add(anchor);
推荐阅读
- sql - 如何仅使用 sql 在 apex oracle 的交互式网格中实现选择列表以及 oracle APEX 中可用的内容?
- c# - 为什么 Asp.Net Core 不想从 Angular 表单中绑定数据?
- visual-studio-code - Visual Studio 代码没有响应
- r - dplyr 组不使用美元符号 data$column 语法
- java - 运行我的程序时导致服务器断开连接的原因是什么?
- reactjs - 通过 PayPal 余额付款选项在 Sandbox 帐户中不可用
- java - 捕获 IIOException 的问题已经捕获
- vba - PowerPoint 2019 for Windows 宏错误:编译错误:标签未定义
- pointers - 当我想使用 llvm api 将数组 ref 传递给函数时该怎么办?
- r - R xaringan 构造页脚以自动包含标题/作者