2017-09-05 8 views
0

現在アンドロイドアプリを使っています。ARToolKitを使って写真をスキャンし、3Dモデルを表示したいと思います。ARToolKitでaddMarkerを使用する

私はAndroidスタジオにARToolKit 6を追加しました。私はプログラム自体をすばやく作成しました。次に、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ファイルと並行してassetsディレクトリで利用できる必要があります。

.jpgファイルのみが可能です。

関連する問題