如何在 ARCore 中显示 PNG 图像?
Posted
技术标签:
【中文标题】如何在 ARCore 中显示 PNG 图像?【英文标题】:How to display PNG image in ARCore? 【发布时间】:2019-02-14 11:47:45 【问题描述】:我想在 Arcore 中显示 2d png 图像。我不想使用 obj、.smf、imgdb 文件和 3D 图像。我已经引用了许多链接,但没有一个显示如何使用 Arcore 仅显示 2d png 图像。
https://github.com/google-ar/arcore-android-sdk
https://developers.google.com/ar/develop/java/quickstart
【问题讨论】:
使用提供的工具在新的 imgdb 文件中引用您的 png。 developers.google.com/ar/develop/c/augmented-images/arcoreimg 但是那个PNG图片不是静态的意味着所有图片都由服务器获取 我不太了解 arcore,但看起来没有什么可以阻止您在运行时直接将图像添加到图像数据库中:developers.google.com/ar/develop/java/augmented-images/guide 我知道我已经检查了示例和增强图像使用 obj 文件。我不想要它,因为我想显示一个简单的 png 文件 您能否说明您希望在 3D 空间中的何处/如何绘制您的 png 或在场景的框架中(如平视显示器)。 【参考方案1】:如果你使用ViewRenderable of Sceneform,那么你可以像标准的android小部件一样,从2D png图像在AR空间中创建一堵墙。
这是 ViewRenderable 的布局 xml 示例。如您所知,它只是 Android 应用程序的布局 xml ;)
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/imageCard"
android:layout_
android:layout_
android:src="@drawable/Your_Image_Resource" />
您可以像下面这样在 Java 代码中获取 ImageView 实例来动态设置源图像。
ViewRenderable.builder()
.setView(fragment.getContext(), R.layout.imgboard)
.build()
.thenAccept(renderable ->
ImageView imgView = (ImageView)renderrable.getView();
);
这是我使用 ViewRenderable 拍摄的样张,最右侧的对象是从 png 图像创建的。
【讨论】:
感谢您的回答,但我可以重复图像吗,因为我想扫描墙壁和扫描区域重复相同的图像。 我也会对这种方法感兴趣 你能不使用Sceneform,只使用Google ARCore,因为Sceneform已被弃用:***.com/a/62694454/8362967 它在我的应用程序中崩溃【参考方案2】:我制作了一个免费应用程序,可以平铺数百个 png 文件(针对计算机科学教授)。你可以在大约2x4米的大范围内试一试:https://play.google.com/store/apps/details?id=a.FlatKmapAR
首先,以 HelloAR 为例,将 Andy.obj 文件替换为 square.obj 文件,该文件只是一个方形对象(少于 10 行文本),并将 Andy.png 替换为您的 square.png 文件。因为他们使用波形对象格式,所以这是我知道的最简单的方法。一旦你得到了,为了平铺它们,创建一个带有多个正方形的 grid.obj,等等......
【讨论】:
嗨YinOrYan:您能提供更多信息或github项目吗?这里有几个模糊的地方。 “用一个 square.obj 替换 Andy.obj 文件,它只是一个方形对象(少于 10 行文本)”,我不明白这一点。然后我用我自己的png替换png?谢谢 basti,HelloAR 示例附带 Google 的 AR Core 开源代码。它只使用一个 .obj 文件和一个 .png 文件。 .obj 是一个非常复杂的 Android Bug Character 模型。您所要做的就是用简单的正方形或网格替换它。 .obj 格式非常简单,自 1980 年代以来一直存在。您不需要任何应用程序来生成它。只需键入几行文本... 我从这里 (github.com/google-ar/arcore-android-sdk/tree/…) 克隆了样本,然后我尝试用正方形创建一个 .obj。如果我用 Paint3D 打开它,它看起来就像我想要的那样,但是我从互联网上下载了一张图片来替换 png,我看到的只是一架橙色的飞机。 (v 0.000000 2.000000 0.00000000 v 0.000000 0.000000 0.000000 v 2.000000 0.00000000 v 2.000000 0 0.000000 0.000000 F 1 2 3 4)我创建了一个Github项目:github.com/basti12354/AndroidARExample(也许可以看看) span> 首先有一些额外的前导空格可能是一个问题,但是你需要一个 vt 和一些 f 中的斜线。此外,您的图像应该有 x=y 像 1024x1024 或蒙娜丽莎将成为一个胖妞,或者更糟糕的是,根本不会出现...... 查看上面的新答案,因为这些评论无法显示代码...【参考方案3】:是的,它实际上需要一些 vt 来定义纹理,除了至少一个 vn 来定义法线,所以 f 需要 / 用于多边形/纹理/法线,如下所示:
v 0.000000 2.000000 0.000000
v 0.000000 0.000000 0.000000
v 2.000000 0.000000 0.000000
v 2.000000 2.000000 0.000000
vt 0.0 0.0
vt 1.0 0.0
vt 1.0 1.0
vt 1.0 1.0
vn 0.0 1.0 0.0
f 1/1/1 2/2/1 3/3/1 4/4/1
【讨论】:
thx,我尝试使用它,正如你建议的那样,我使用了 1024x1024 像素的图像。我更新了我的 github 存储库。但是如果我尝试放置它,它就会变形并且颜色错误。 github.com/basti12354/AndroidARExample/blob/master/…(我用的是1024x1024的圆形美国队长图标,但蒙娜丽莎也没有正确显示) 哦,抱歉,这可能是因为我刚刚在您的文件中添加了最后 6 行,所以您必须更改 vt 的顺序以匹配顶部...以上是关于如何在 ARCore 中显示 PNG 图像?的主要内容,如果未能解决你的问题,请参考以下文章