Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 场景窗体与摄影机的碰撞_Android_Collision Detection_Arcore - Fatal编程技术网

Android 场景窗体与摄影机的碰撞

Android 场景窗体与摄影机的碰撞,android,collision-detection,arcore,Android,Collision Detection,Arcore,我在扩展我有限的阿科雷知识 我的问题与你的相似(但不同) 我想知道我的设备摄像头节点是否与我的其他节点相交/重叠,但到目前为止我还没有任何运气 我正在尝试类似的操作(摄影机是另一个节点): 首先,这有意义吗 我可以使用以下方法检测场景中的所有节点碰撞: for (Node node : nodes) { ... ArrayList<Node> results = scene.overlapTestAll(node); ... }

我在扩展我有限的阿科雷知识

我的问题与你的相似(但不同)


我想知道我的设备摄像头节点是否与我的其他节点相交/重叠,但到目前为止我还没有任何运气

我正在尝试类似的操作(摄影机是另一个节点):

首先,这有意义吗

我可以使用以下方法检测场景中的所有节点碰撞:

for (Node node : nodes) {
        ...
        ArrayList<Node> results = scene.overlapTestAll(node);
        ...
} 
for(节点:节点){
...
ArrayList结果=scene.overlapTestAll(节点);
...
} 
假设摄影机节点没有可渲染(因此没有默认的碰撞形状),我尝试设置自己的碰撞形状,但这实际上捕获了我试图执行的所有点击事件,因此我认为我一定是做错了

我在想一些事情,比如在摄像机前修复一个失效的节点

我可能要求太多的ARCore,但是有人找到了一种方法来检测“用户”(即摄影机节点)和另一个节点之间的冲突吗?或者我应该通过室内定位来进行“碰撞检测”

提前感谢:)


更新:它真的很粗糙,性能也很高,但实际上你可以从
onUpdate
节点内部比较相机和节点的世界空间位置,你可能需要管理一些公差和其他事情来平滑交互。

做同样的事情的一个想法是使用光线投射来击中对象,如果它们很近,就做些什么。您可以在onUpdateListener中使用类似的内容:

Camera camera = arSceneView.getScene().getCamera();
Ray ray = new Ray(camera.getWorldPosition(), camera.getForward());
HitTestResult result = arSceneView.getScene().hitTest(ray);
if (result.getNode() != null && result.getDistance() <= SOME_THRESHOLD) {
  // Hit something
  doSomething (result.getNode());
} 
Camera-Camera=arSceneView.getScene().getCamera();
光线=新光线(camera.getWorldPosition(),camera.getForward());
HitTestResult=arSceneView.getScene().hitTest(光线);

如果(result.getNode()!=null&&result.getDistance(),这将非常有效,并且比我的OverlappetTestAll便宜得多。另外,在创建节点时是否将
arSceneView
传递到节点中?使用
node\getScene()对我来说非常有用
,所以我想知道这是有利的还是您所拥有的,这正是我手头上所拥有的。就我个人而言,我反复使用在活动的onCreate()中初始化的视图的成员变量,并将参数传递给方法。我认为没有任何性能差异。
Camera camera = arSceneView.getScene().getCamera();
Ray ray = new Ray(camera.getWorldPosition(), camera.getForward());
HitTestResult result = arSceneView.getScene().hitTest(ray);
if (result.getNode() != null && result.getDistance() <= SOME_THRESHOLD) {
  // Hit something
  doSomething (result.getNode());
}