2017-09-05 53 views
0

我目前正在開發一個Android應用程序,並且我想包含ARToolKit來掃描圖片並顯示3D模型。在ARToolKit中使用addMarker

因此,我將ARToolKit 6添加到我的Android Studio中,並且我自己快速創建了該程序。接下來我想用addMarker添加標記,所以基本上我的代碼就是這樣。

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上一個教程得到的代碼。我想添加新的標記。我怎樣才能做到這一點?或者基本上,我怎樣才能添加新的圖片,所以它不會掃描每次更改圖片?

感謝您的幫助。

回答

0

此代碼:

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) 
}; 

是負責添加 '標記' 叫可追蹤到的ARToolKit。您可以將標記添加到trackables陣列。

.jpg文件需要在與Alterra * .jpg文件平行的資產目錄中可用。

只有.jpg文件是可能的。