首页 > 解决方案 > 如何使用 Android Studio、Vuforia 和 OpenGL 绘制简单的 3D 模型

问题描述

我有一个功能齐全的 iOS 应用程序,现在我正在 Android Studio 中开发 Android 版本。该应用程序不是 3D 游戏,它使用普通的列表视图等,但在一项活动中,该应用程序使用增强现实。我选择使用 Vuforia(获得比 ARCore+ARKit 更多的设备)并购买了这个简单的 3D 模型。

https://www.turbosquid.com/3d-models/blend-gift/977474

现在我只想在我的 Vuforia Image Marker 上展示我自己的模型。简单的!我想 ...

Vuforia 使用 OpenGL 来渲染他们的 3D 模型。它是一个茶壶(https://library.vuforia.com/articles/Training/Image-Target-Guide),它看起来像渲染茶壶所需的类,如下所示:

public class Teapot extends MeshObject {

private Buffer mVertBuff;
private Buffer mTexCoordBuff;
private Buffer mNormBuff;
private Buffer mIndBuff;

private int indicesNumber = 0;
private int verticesNumber = 0;

 public Teapot()
    {
        setVerts();
        setTexCoords();
        setNorms();
        setIndices();
    }  

 private void setVerts()
    {
            double[] TEAPOT_VERTS = { 11.222200, 0.110300, 20.030291, 10.302300, ect. } 
        mVertBuff = fillBuffer(TEAPOT_VERTS);
        verticesNumber = TEAPOT_VERTS.length / 3;
        }

 private void setTexCoords()
    {
        double[] TEAPOT_TEX_COORDS = { 0.608828, 0.354913, 0.609037, 0.414650, ect. }

          mTexCoordBuff = fillBuffer(TEAPOT_TEX_COORDS);


    }

 private void setNorms()
    {
        double[] TEAPOT_NORMS = { -0.964496, 0.067011, -0.255454, -0.865037, ect. } 

        mNormBuff = fillBuffer(TEAPOT_NORMS);


           }

private void setIndices()
    {
        short[] TEAPOT_INDICES = { 0, 1, 2, 2, 3, 0, 4, 5, 6, 6, 7, 4, 8, 9, ect. }

        mIndBuff = fillBuffer(TEAPOT_INDICES);
        indicesNumber = TEAPOT_INDICES.length;
        } 
}

所以我想 - 啊哈 - 如果我能找到我的 3D 模型的 Verts、TexCoords、Norms 和 Indices。我可以把它们贴在这里,然后画我很棒的圣诞礼物,而不是茶壶。

我有 3D 模型:

我也有搅拌机(但搅拌机技能几乎为零)。经过长时间的搜索,我认为如果我可以将模型转换为 j-son 文件。我可以获得正确的输入来绘制它。但是创建的 j-son 文件非常大!当我粘贴从文件中获得的数字时,应用程序崩溃并显示:错误:代码太大 - 我当然不想要:-(

所以现在我又被困住了……也许我的礼物太大了?还是我这样做的方式完全错误?

我认为 Android Studios 的创建者应该使 3D 导入和渲染更容易——但这对我现在没有帮助!

它只是一个简单的 3D 礼物,我想要它在简单的 3D 茶壶所在的地方。

标签: androidandroid-studio3dopengl-esvuforia

解决方案


推荐阅读