java - 图像处理通过使用 ARCore 和 Android Studio 的 ArFragment 在图像上放置 3D 模型
问题描述
我已经通过检测图像成功实现了 3D 模型,但问题是我必须旋转并放大和缩小该模型。我也通过使用 transformabel 方法实现了它,但问题是每当我触摸该模型时,它都会变大。
AnchorNode anchorNode = new AnchorNode(anchor);
arFragment.getArSceneView().getScene().addChild(anchorNode);
TransformableNode transformableNode = new TransformableNode(arFragment.getTransformationSystem());
transformableNode.setParent(anchorNode);
transformableNode.setRenderable(modelRenderable);
transformableNode.select();
] 1
解决方案
移动可渲染对象的一种常用方法(可能是撰写本文时的主要方法)是实际删除它,然后在新位置或姿势中创建它 - 例如:
- 删除现有的可渲染对象并从场景中移除
- 创建一个新锚并将其放置在您想要的姿势/位置
- 将可渲染对象添加到您刚刚创建的新锚点
在代码中:
private AnchorNode moveRenderable(AnchorNode markAnchorNodeToMove, Pose newPoseToMoveTo) {
//Move a renderable to a new pose
if (markAnchorNodeToMove != null) {
arFragment.getArSceneView().getScene().removeChild(markAnchorNodeToMove);
} else {
Log.d(TAG,"moveRenderable - markAnchorNode was null");
return null;
}
Frame frame = arFragment.getArSceneView().getArFrame();
Session session = arFragment.getArSceneView().getSession();
Anchor markAnchor = session.createAnchor(newPoseToMoveTo.extractTranslation());
AnchorNode newMarkAnchorNode = new AnchorNode(markAnchor);
newMarkAnchorNode.setRenderable(andyRenderable);
newMarkAnchorNode.setParent(arFragment.getArSceneView().getScene());
return newMarkAnchorNode;
}
以上是来自示例应用程序的编辑摘录 - 您可以在此处找到完整的源代码并对其进行修改等:https ://github.com/mickod/LineView
另一个注意事项 - 在 AR 环境中放大和缩小可渲染对象可能会有点混乱。可渲染对象就像现实世界中的一个对象,因此您可能会谈论放大和缩小整个相机视图,或者让可渲染对象本身更大或更小。
推荐阅读
- windows - 远程 Windows 计算机操作系统根驱动器号
- scala - 如何从 sbt dist 中排除一些 jar 并在运行时加载它们
- java - ThreadPoolTaskScheduler 不适用于线程池
- java - 改造 API 接口调用错误
- authentication - 使用 context.Activity.CreateOAuthReplyAsync 在 Microsoft Teams 中显示来自机器人的 Office 365 身份验证对话框
- python-3.x - Python APScheduler 密钥错误
- python - 提供形状为 (?, n) 的占位符时出现问题
- r - 对于第三个预测变量的特定范围,我如何可视化来自 NN 的 2 个预测变量的洞察力
- html - 我的 CSS 过渡有问题,它在第一次运行时不起作用
- php - 在 mongodb PHP 中同时获取嵌套数组和更新字段