首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ARToolKit中使用addMarker

在ARToolKit中使用addMarker
EN

Stack Overflow用户
提问于 2017-09-05 18:42:15
回答 1查看 402关注 0票数 0

我目前正在开发一个安卓应用程序,我想包括扫描图片和显示3d模型的ARToolKit。

因此,我将ARToolKit 6添加到我的Android Studio中,并快速创建了程序本身。接下来,我想用addMarker添加标记,所以基本上我的代码是这样的。

代码语言:javascript
复制
class ARTrackingRenderer extends ARRenderer {

private static final class Trackable{
    String name;
    float height;

    Trackable(String name, float height)
    {
        this.name = name;
        this.height = height;
    }
}

private static final Trackable trackables[] = new Trackable[]{
        new Trackable("Alterra_Ticket_1.jpg", 95.3f),
        new Trackable("Alterra_Postcard_2.jpg", 95.3f),
        new Trackable("Alterra_Postcard_3.jpg", 127.0f),
        new Trackable("Alterra_Postcard_4.jpg", 95.3f)
};

private int trackableUIDs[] = new int[trackables.length];
private Cube cube;
private Cube cube2;

@Override
public boolean configureARScene() {
    int i = 0;
    for (Trackable trackable : trackables){
        trackableUIDs[i] = ARToolKit.getInstance().addMarker("2d;Data/2d/" + trackable.name + ";" + trackable.height);
        if (trackableUIDs[1] < 0) return false;
    }
    NativeInterface.arwSetTrackerOptionInt(NativeInterface.ARW_TRACKER_OPTION_2D_MAX_IMAGES, trackables.length);
    return true;
}

//Shader calls should be within a GL thread. GL threads are onSurfaceChanged(), onSurfaceCreated() or onDravFrame()
//As the cube instantiates the shader during setShaderProgram call  we need to create the cube here.
@Override
public void onSurfaceCreated(GL10 unused, javax.microedition.khronos.egl.EGLConfig config){
    this.shaderProgram = new SimpleShaderProgram(new SimpleVertexShader(), new SimpleFragmentShader());
    cube = new Cube(30.0f, 0.0f, 0.0f, 0.0f); //Das erste ist die Größe, das zweite die horizontale Ausrichtung, das dritte die vertikale und das vierte der Abstand vom boden aus
    cube2 = new Cube(15.0f, 50.0f, 0.0f, 20.0f);
    cube.setShaderProgram(shaderProgram);
    cube2.setShaderProgram(shaderProgram);
    super.onSurfaceCreated(unused, config);
}

@Override
public void draw(){
    super.draw();

    GLES20.glEnable(GLES20.GL_CULL_FACE);
    GLES20.glEnable(GLES20.GL_DEPTH_TEST);
    GLES20.glFrontFace(GLES20.GL_CCW);

    for (int trackableUID:trackableUIDs){
        if (ARToolKit.getInstance().queryMarkerVisible(trackableUID)){
            float[] projectionMatrix = ARToolKit.getInstance().getProjectionMatrix();
            float[] modelVievMatrix = ARToolKit.getInstance().queryMarkerTransformation(trackableUID);
            cube.draw(projectionMatrix, modelVievMatrix);
            cube2.draw(projectionMatrix, modelVievMatrix);
        }
    }
}

}

我从一个关于YouTube的教程中得到了代码。我想添加新的标记。我该怎么做呢?或者基本上我怎么才能添加新的图片,这样它就不会每次扫描alterra图片?

感谢大家的帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-09-09 16:19:55

这段代码:

代码语言:javascript
复制
private static final Trackable trackables[] = new Trackable[]{
        new Trackable("Alterra_Ticket_1.jpg", 95.3f),
        new Trackable("Alterra_Postcard_2.jpg", 95.3f),
        new Trackable("Alterra_Postcard_3.jpg", 127.0f),
        new Trackable("Alterra_Postcard_4.jpg", 95.3f)
};

负责将称为Trackable的“标记”添加到ARToolKit。您可以将标记添加到trackables数组中。

在与Alterra*.jpg文件平行的assets目录中,需要提供.jpg文件。

只有.jpg文件是可能的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46053004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档