我是Android和AR的新手,我在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
}
请帮助我克服这个问题。
谢谢。
要创建一个新的标记,您可以使用以下在线标记生成器工具之一:
- 标记发生器(仅限图片)
- 标记生成器芋头(支持摄像头)
创建一个标记,最好以。patt后缀保存(例如dog.patt)。
从Android应用程序(例如SDCard)中将你的标记复制到一个可访问的目录中。
要加载特定的标记,您需要查看AndAR存储库中的CustomActivity,以了解它是如何完成的(/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的对象)时,你可以指定它应该使用哪个标记作为初始化参数(例如pat .hiro)。
对于信息,初始化参数是:标记名称(任意),文件标记(您的。patt文件),标记大小(mm),标记中心(默认0,0))。