3

我是 Android 以及增强现实的新手,我在 AR 中遇到了一些问题。

我正在使用 AndAR 的示例,在此示例中,我可以在标记上看到简单的立方体框。

但我想在我的标记上使用我自己的图像,而不是在构建立方体中使用。

我想为不同的标记使用不同的图像。

这是我的代码:- 生成多维数据集的地方。

public class CustomObject extends ARObject {


public CustomObject(String name, String patternName,
        double markerWidth, double[] markerCenter) {
    super(name, patternName, markerWidth, markerCenter);
    float   mat_ambientf[]     = {0f, 1.0f, 0f, 1.0f};
    float   mat_flashf[]       = {0f, 1.0f, 0f, 1.0f};
    float   mat_diffusef[]       = {0f, 1.0f, 0f, 1.0f};
    float   mat_flash_shinyf[] = {50.0f};

    mat_ambient = GraphicsUtil.makeFloatBuffer(mat_ambientf);
    mat_flash = GraphicsUtil.makeFloatBuffer(mat_flashf);
    mat_flash_shiny = GraphicsUtil.makeFloatBuffer(mat_flash_shinyf);
    mat_diffuse = GraphicsUtil.makeFloatBuffer(mat_diffusef);

}
public CustomObject(String name, String patternName,
        double markerWidth, double[] markerCenter, float[] customColor) {
    super(name, patternName, markerWidth, markerCenter);
    float   mat_flash_shinyf[] = {50.0f};

    mat_ambient = GraphicsUtil.makeFloatBuffer(customColor);
    mat_flash = GraphicsUtil.makeFloatBuffer(customColor);
    mat_flash_shiny = GraphicsUtil.makeFloatBuffer(mat_flash_shinyf);
    mat_diffuse = GraphicsUtil.makeFloatBuffer(customColor);

}

private SimpleBox box = new SimpleBox();
private FloatBuffer mat_flash;
private FloatBuffer mat_ambient;
private FloatBuffer mat_flash_shiny;
private FloatBuffer mat_diffuse;

/**
 * Everything drawn here will be drawn directly onto the marker,
 * as the corresponding translation matrix will already be applied.
 */
@Override
public final void draw(GL10 gl) {
    super.draw(gl);

    gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_SPECULAR,mat_flash);
    gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_SHININESS, mat_flash_shiny);    
    gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, mat_diffuse);  
    gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT, mat_ambient);

    //draw cube
    gl.glColor4f(0, 1.0f, 0, 1.0f);
    gl.glTranslatef( 0.0f, 0.0f, 12.5f );


    box.draw(gl);
}
@Override
public void init(GL10 gl) {
    // TODO Auto-generated method stub

}

请帮助我克服这个问题。

谢谢。

4

1 回答 1

0

要创建新标记,您可以使用以下在线标记生成器工具之一:

创建一个标记并最好使用 .patt 后缀(例如 dog.patt)保存它。

将您的标记从您的 Android 应用程序(例如 SDCard)复制到可访问的目录中。

要加载您的特定标记,您需要查看 AndAR 存储库中的 Custom Activity 以了解它是如何完成的( /svn/trunk/AndAR/src/edu/dhbw/andar/pub/CustomActivity.java ):

someObject = new CustomObject("test", "patt.hiro", 80.0, new double[]{0,0});
artoolkit.registerARObject(someObject);

当您声明您的 3D 对象(CustomObject,绘制您的 SimpleBox 的对象)时,您可以指定它应该使用哪个标记作为初始化参数(例如 patt.hiro)。

有关信息,初始化参数是:标记名称(任意)、文件标记(您的 .patt 文件)、标记大小(毫米)、标记中心(默认为 0,0))。

于 2013-05-15T12:59:53.677 回答