【问题标题】:Vuforia + OBJ loaderVuforia + OBJ 加载器
【发布时间】:2014-12-15 12:27:34
【问题描述】:

我希望将 Vuforia 用于 AR 项目。

我了解它使用 OpenGL ES,因此通常使用顶点数据数组来构造对象。

我希望不能使用标准的 OBJ 文件。

我已经研究过使用this,但不知道如何在 Android Java SDK 中使用 *.h 文件。

所以,我开始考虑在 OBJ 中加载。我想尝试使用this 之类的东西,但只需使用 obj 阅读器。但我被困在如何获取顶点数组上。

是否有人知道如何加载 OBJ 并将其传递到 Vuforia 示例应用程序中?

(它需要在 Java SDK 中工作,而不是 NDK)

【问题讨论】:

  • Pablo 先生,您解决了这个问题吗?我被困在保存的东西上,不知道如何继续。任何帮助将不胜感激。谢谢。
  • 我们的一位开发人员流血、汗水和泪水,创建了 Rajawali + Vuforia 包装器,这意味着您可以加载 Rajawali 可以使用的任何模型文件(通常为 OBJ 或 FBX)。如果我们发布它,我会回来告诉你!
  • 请释放它@MrPablo!否则,我将成为我们公司的开发人员!
  • 我会和我的老板谈谈这件事。我们完成了这项工作(我们需要将其用于一些客户工作),所以我会看看计划是什么。

标签: java android opengl-es android-ndk vuforia


【解决方案1】:

.obj 和 openGL 不直接兼容,openGL 只需要 1 个顶点索引(所有属性都有相同的索引),而 .obj 允许每个属性有不同的索引。

该脚本所做的是预处理 obj 文件,因此您可以将其直接包含在代码中,而无需在运行时(缓慢)解析,

.h文件的等效java代码为:

package resource.models;

public class ModelName{

    public int  NumVerts = //exactly the number that is <name>NumVerts in the header

    public float[] Verts = {
        //copy paste the numbers and append f after each number like so:

        // f 1//2 7//2 5//2
        -0.5f, -0.5f, -0.5f,
        0.5f, 0.5f, -0.5f,
        0.5f, -0.5f, -0.5f,
        // f 1//2 3//2 7//2
        -0.5f, -0.5f, -0.5f,
        -0.5f, 0.5f, -0.5f,
        0.5f, 0.5f, -0.5f,

        //and so on
    }

    //repeat for Normals and textures:
    public float[] Normals = {
        // f 1//2 7//2 5//2
        0f, 0f, -1f,
        0f, 0f, -1f,
        0f, 0f, -1f,
        // f 1//2 3//2 7//2
        0f, 0f, -1f,
        0f, 0f, -1f,
        0f, 0f, -1f,

        //and so on
    }
}

要填充 openGL 缓冲区,请将浮点数组包装在 FloatBuffers 中,然后将它们传递给 BufferData 调用。

将该文章中的脚本更改为与 java 兼容需要更改代码行中的代码 492 以发出包和类声明,并在每个数字后附加一个 f 加上结尾的右大括号。

【讨论】:

  • 抱歉,我不太清楚。理想情况下,我想使用 Java 类来加载 .obj 。我宁愿不使用 .h 文件,因为对于复杂的模型,大量的行会导致 Android Studio 出现问题。我想使用第二个链接中的代码,github.com/ldo/ObjViewer_Android,但我不确定具体如何。
  • 该代码尚未准备好 openGLSE20,我建议阅读如何将缓冲区传递给 VBO 并绘制它们,因为这是一个大话题。
  • 嗯,好的。我没有使用 OpenGL 的经验,我需要让 Vuforia 使用 OBJ + MTL 文件。继续挖掘,看看是否有一个 Java 库。
  • 老实说,我更喜欢对 OBJ 进行预处理,并将其置于易于阅读的(又称二进制)格式,以便导出到 VBO。
  • 你的意思是尝试走 .h 文件路径吗?我会的,但似乎我必须使用 NDK 并用 C++ 对其进行编码,但这会落入现有的 Java 项目中。我几乎不擅长 Java,更不用说试图弄清楚 C++ 了:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多