用于存储 3D 模型的 AR 应用程序数据库

玛雅克耆那教

我正在学习增强现实并使用 Google 的 AR-Core 开发 AR 应用程序。它适用于单个模型,但我在想是否可以在数据库中上传不同的 3D 模型,应用程序将从数据库中获取模型并显示在屏幕上。

编辑:我想从数据库加载模型运行时。除了 GLTF2 之外,还有其他方法可以在运行时加载,例如 OBJ 或 FBX。

米克

您在应用程序中使用多个模型的方式的两个示例,我认为这就是您的目标,是:

  • 在构建时在应用程序中包含多个 Renderable
  • 添加在运行时加载和构建模型的能力

第一个例子如下所示。这将在应用程序的“raw”文件夹中加载并构建所有可渲染对象,在 Main ACtivity 的 onCreate 函数中(此示例是下面的 Kotlin)。这个例子使用了一个“MetaRenderable”类,它只是一个带有属性的类,用于存储可渲染名称和可渲染本身。它通过在原始文件夹中的名称中查找已知文本字符串来搜索可渲染文件,但您可以简单地为所有“.sfb”文件查找每个文件:

  override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        //Check that AR is supported on this device
        if (!checkIsSupportedDeviceOrFinish(this)) {
            return
        }

        //Create the set of renderables
        val rawFields: Array<Field> = R.raw::class.java.fields
        for (i in 0 .. rawFields.count() - 1) {
            val resID = rawFields[i].getInt(rawFields[i])
            val value = TypedValue()
            resources.getValue(resID, value, true)
            val rawFileName = value.string.toString()
            if (rawFileName.contains("com_yourpackagename_")) {
                //This is a renderable so build it and add it to the list
                Log.d(TAG,"rawFileName: " + rawFileName)
                ModelRenderable.builder()
                    .setSource(this, resID)
                    .build()
                    .thenAccept{
                        val newMetaRenderable:MetaRenderable = MetaRenderable()
                        newMetaRenderable.name = rawFields[i].name.substringAfter("com_yourpackagename_renderable_")
                        newMetaRenderable.renderable = it
                        listOfMetaRenderables.add(newMetaRenderable)
                        //Set the default renderable
                        if(rawFileName.contains("your_defaul_trenderable_name")) {
                            selectedRenderable = it
                        }
                    }
                    .exceptionally {
                        Log.d(TAG, "Could not build Renderable id: " + resID)
                        Toast.makeText(this@MainActivity, "Could not build one of the renderables", Toast.LENGTH_LONG).show()
                        return@exceptionally null
                    }
            }
        }

对于第二个示例方法,在运行时加载,您可以使用 RenderableSource.Builder 对象。这将允许您在运行时为给定的 URL 构建可渲染文件,尽管目前仅限于“GLTF2”文件,AFAIK。

RenderableSource.Builder
setSource(Context context, Uri modelUri, RenderableSource.SourceType sourceType) 设置要导入的资产的 Uri。

文档在这里:

这里有一个示例项目,可以从 Google 的 Poly 网站浏览、下载和构建模型:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Android SQLite数据库中存储3D模型

ar.js 3D模型未显示

从BVH文件中提取数据并将其应用于我的3D模型?

用于构建AR Tango 3d映射/导航的工具?

在 Unity 中将材质纹理应用于 3D 模型

如何将光泽效果应用于 3D 模型?

ASP.NET在应用程序数据库中存储会话状态

如何在AR套件中旋转或缩放3D模型scn文件

无法在AR增强面部中设置3d模型的正确方向

Android-存储或创建3D模型

在本地存储 PC 应用程序数据并与服务器数据库同步的最佳方式

在哪里/如何在数据库中存储有关(SQLite3)数据库的应用程序定义的属性?

是否必须使用 ARCore 与应用程序一起编译 3D 模型?

如何在由模型生成的数据库脚本中包含用于创建存储过程的代码

在AWS S3上存储CakePHP库以用于多个应用程序

用于模型和数据存储引擎的 Swift Core Data

用于聊天应用程序的Firebase数据库结构

数据库设计问题...用于预订应用程序

适用于Android应用程序的数据库

在同一个应用程序中为同一个模型和同一个存储库使用多个 mongo 数据库

用于 SwiftUI 预览的应用程序数据文件存储在哪里

yii中的控制台应用程序无法包含AR模型

寻找适用于大多数读取应用程序的数据库解决方案,查询3亿条记录

多个Django数据库-将模型映射到同一应用程序中的数据库

亚马逊s3用于存储文件什么?,文件存储还是数据库?

如何通过存储API从上传的3D模型中获取.data3d.buffer

在应用程序启动时检查数据库架构是否与SQLAlchemy模型匹配

在为基本聊天Web应用程序制作mysql数据库模型时需要指导

存储iOS应用程序数据的最佳方法?