android - 如何将模型与 ARToolKit for Android 中的标记相关联?

标签 android artoolkit

我是 ARToolKit 的新手,我一直在使用适用于 Android 的 SimpleNativeCars 示例。我已经训练了一个新的标记并将它放在 Assets 文件夹中,并试图将它与我自己的模型相关联,该模型位于我的模型文件夹中。我已经在 ARWrapperNativeCars.cpp 文件中完成了此操作,就像其他模型和标记一样,但它无法识别它。我还尝试将两个示例模型更改为相反的标记,但仍然无济于事。我已经搜索过这个网站和网络,但找不到这个问题的答案。谁能告诉我我错过了什么?

以下是我尝试解决此问题的方法。

谢谢。

#define NUM_MODELS 3
static ARModel models[NUM_MODELS] = {2};

static float lightAmbient[4] = {0.1f, 0.1f, 0.1f, 1.0f};
static float lightDiffuse[4] = {1.0f, 1.0f, 1.0f, 1.0f};
static float lightPosition[4] = {0.0f, 0.0f, 1.0f, 0.0f};

JNIEXPORT void JNICALL JNIFUNCTION_DEMO(demoInitialise(JNIEnv* env, jobject object)) {

const char *model0file = "Data/models/Ferrari_Modena_Spider.obj";
const char *model1file = "Data/models/Porsche_911_GT3.obj";
const char *model2file = "Data/models/Keith.obj";

models[0].patternID = arwAddMarker("single;Data/patt.hiro;80");
arwSetMarkerOptionBool(models[0].patternID, ARW_MARKER_OPTION_SQUARE_USE_CONT_POSE_ESTIMATION, false);
arwSetMarkerOptionBool(models[0].patternID, ARW_MARKER_OPTION_FILTERED, true);

models[0].obj = glmReadOBJ2(model0file, 0, 0); // context 0, don't read textures yet.
if (!models[0].obj) {
    LOGE("Error loading model from file '%s'.", model0file);
    exit(-1);
}
glmScale(models[0].obj, 0.035f);
//glmRotate(models[0].obj, 3.14159f / 2.0f, 1.0f, 0.0f, 0.0f);
glmCreateArrays(models[0].obj, GLM_SMOOTH | GLM_MATERIAL | GLM_TEXTURE);
models[0].visible = false;

models[1].patternID = arwAddMarker("single;Data/patt.kanji;80");
arwSetMarkerOptionBool(models[1].patternID, ARW_MARKER_OPTION_SQUARE_USE_CONT_POSE_ESTIMATION, false);
arwSetMarkerOptionBool(models[1].patternID, ARW_MARKER_OPTION_FILTERED, true);

models[1].obj = glmReadOBJ2(model1file, 0, 0); // context 0, don't read textures yet.
if (!models[1].obj) {
    LOGE("Error loading model from file '%s'.", model1file);
    exit(-1);
}
glmScale(models[1].obj, 0.035f);
//glmRotate(models[1].obj, 3.14159f / 2.0f, 1.0f, 0.0f, 0.0f);
glmCreateArrays(models[1].obj, GLM_SMOOTH | GLM_MATERIAL | GLM_TEXTURE);
models[1].visible = false;

models[2].patternID = arwAddMarker("single;Data/patt.job;80");
arwSetMarkerOptionBool(models[2].patternID, ARW_MARKER_OPTION_SQUARE_USE_CONT_POSE_ESTIMATION, false);
arwSetMarkerOptionBool(models[2].patternID, ARW_MARKER_OPTION_FILTERED, true);

models[2].obj = glmReadOBJ2(model2file, 0, 0); // context 0, don't read textures yet.
if (!models[2].obj) {
    LOGE("Error loading model from file '%s'.", model2file);
    exit(-1);
}
glmScale(models[2].obj, 0.035f);
//glmRotate(models[1].obj, 3.14159f / 2.0f, 1.0f, 0.0f, 0.0f);
glmCreateArrays(models[2].obj, GLM_SMOOTH | GLM_MATERIAL | GLM_TEXTURE);
models[2].visible = false;

最佳答案

我注意到 Android 项目对标记(在应用程序级别)和 Assets 下的其他项目进行了一些缓存。缓存系统链接到 Manifest 上的版本号,因此如果这是问题所在,增加它应该可以解决它。

那是我在添加新标记时遇到的问题,但我没有使用 NDK,所以你的情况可能不是这样。

关于android - 如何将模型与 ARToolKit for Android 中的标记相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31595692/

相关文章:

php - 字符编码问题?

java - 在 Activity 之间传递 LinkedList

android - 将 ARToolkit 与安卓一起使用

java - 这是 ActionBar 的一个很好的用途吗?

python - 无法从 Android 上的 Kivy 应用程序发送蓝牙

android - 导航组件 : Navigate from Fragment in Viewpager to another Fragment

javascript - 在 ARToolkit 中更改方形标记的默认边框粗细

android - ARToolkit 中的单图像检测

android - Android 上 Unity 的 ARToolkit : Camera won't start, 只是黑屏

android - 如何在 ARMovieProj (ARToolkit) 中更改视频的大小