ARCore 虚拟物体运动
ARCore virtual object movement
所以我开始在 Java 的 Android Studio 中使用 ARCore,我测试了他们的演示 HelloAR,效果很好。
现在我想添加一些简单的东西,比如将对象移动到滚动方向。
在 TapHelper 中,我需要为 GestureDetector 添加 onScroll
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
}
但这就是我现在卡住的地方,虚拟对象是基于锚点渲染的?那么我需要更新锚点位置还是虚拟对象的位置呢?我该怎么做,锚无法更新其位置,我是销毁它并创建一个新的,还是我遗漏了什么?
如果您只想旋转可渲染对象本身,则无需创建新锚点,但如果您想将可渲染对象移动到 'world' 中的新位置,则标准方法位于这次好像是删掉anchor重新创建
以下是您如何执行此操作的示例:
private AnchorNode moveRenderable(AnchorNode myAnchorNodeToMove, Pose newPoseToMoveTo) {
//Move a renderable to a new pose
if (myAnchorNodeToMove != null) {
arFragment.getArSceneView().getScene().removeChild(myAnchorNodeToMove);
} else {
Log.d(TAG,"moveRenderable - myAnchorNode was null");
return null;
}
Frame frame = arFragment.getArSceneView().getArFrame();
Session session = arFragment.getArSceneView().getSession();
Anchor myAnchor = session.createAnchor(newPoseToMoveTo.extractTranslation());
AnchorNode newMyAnchorNode = new AnchorNode(myAnchor);
newMyAnchorNode.setRenderable(andyRenderable);
newMyAnchorNode.setParent(arFragment.getArSceneView().getScene());
return newMyAnchorNode;
}
以上内容是根据一个工作示例修改而来的,以使其在此处更具可读性 - 完整源代码位于此处:https://github.com/mickod/LineView
所以我开始在 Java 的 Android Studio 中使用 ARCore,我测试了他们的演示 HelloAR,效果很好。
现在我想添加一些简单的东西,比如将对象移动到滚动方向。
在 TapHelper 中,我需要为 GestureDetector 添加 onScroll
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
}
但这就是我现在卡住的地方,虚拟对象是基于锚点渲染的?那么我需要更新锚点位置还是虚拟对象的位置呢?我该怎么做,锚无法更新其位置,我是销毁它并创建一个新的,还是我遗漏了什么?
如果您只想旋转可渲染对象本身,则无需创建新锚点,但如果您想将可渲染对象移动到 'world' 中的新位置,则标准方法位于这次好像是删掉anchor重新创建
以下是您如何执行此操作的示例:
private AnchorNode moveRenderable(AnchorNode myAnchorNodeToMove, Pose newPoseToMoveTo) {
//Move a renderable to a new pose
if (myAnchorNodeToMove != null) {
arFragment.getArSceneView().getScene().removeChild(myAnchorNodeToMove);
} else {
Log.d(TAG,"moveRenderable - myAnchorNode was null");
return null;
}
Frame frame = arFragment.getArSceneView().getArFrame();
Session session = arFragment.getArSceneView().getSession();
Anchor myAnchor = session.createAnchor(newPoseToMoveTo.extractTranslation());
AnchorNode newMyAnchorNode = new AnchorNode(myAnchor);
newMyAnchorNode.setRenderable(andyRenderable);
newMyAnchorNode.setParent(arFragment.getArSceneView().getScene());
return newMyAnchorNode;
}
以上内容是根据一个工作示例修改而来的,以使其在此处更具可读性 - 完整源代码位于此处:https://github.com/mickod/LineView