Java 如何在Scenform(AR CORE)中将触摸屏坐标添加到现实世界中?

Java 如何在Scenform(AR CORE)中将触摸屏坐标添加到现实世界中?,java,android,augmented-reality,arcore,sceneform,Java,Android,Augmented Reality,Arcore,Sceneform,我想将图像添加到AR视图中。我能够在渲染平面时添加图像。但我想添加,即使没有渲染的平面。我想把它添加到AR视图的真实位置-我实际上想把这个接触点转换为AR视图的世界位置 List<HitResult> hitResult = frame.hitTest(motionEvent); if (hitResult.size() != 0) { //This code works fine HitResult

我想将图像添加到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);
                        } 
                    }
                }
List hitResult=frame.hitTest(运动事件);
如果(hitResult.size()!=0){
//这个代码很好用
HitResult hit=HitResult.get(0);
Anchor Anchor=hit.createAnchor();
锚点节点锚点节点=新锚点节点(锚点);
setParent(arFragment.getArSceneView().getsceneview());
锚。添加(锚);
}否则{
//这不起作用
if(arFragment.getArSceneView().getSession()!=null){
Anchor Anchor=arFragment.getArSceneView().getSession().CreateAchor(frame.getCamera().getPose().compose(Pose.MakeTransation(0,0,-1f)).extractTranslation());
锚点节点锚点节点=新锚点节点(锚点);
setParent(arFragment.getArSceneView().getsceneview());
锚。添加(锚);
if(drawingText.equalsIgnoreCase(“imagearrow”)){
addArrow(锚点、箭头类型、箭头颜色);
} 
}
}

我没有得到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);

不起作用,可渲染对象远离给定坐标。假设我想输入屏幕宽度/2和高度/2(屏幕中心)的内容,它显示在右下角。