【ARToolkit】关于如何制作标识卡patt

首先给大家讲一下,为什么我们的摄像头可以识别出标识卡,并在标识卡上出现自己需要的虚拟物体?

原理是这样的,其实总共有个 步骤。第一步:首先我们利用OpenGL的知识来画出一个虚拟物体,用来画出这个虚拟物体的代码要被放在 OpenGL来实现。第二步:制作出一个新模板,也就是制作出一个自己的标识卡。要创建一个新的模板,首先应打印空白的模板(位于下方第一个图)。这只是一个黑方块, 中间是空的白色方块。接着为需要的模板创建一个黑白或者彩色的、适合这个中心的方块 的图像,并把它打印出来。好的模板应该是不对称,而且没有很细微的细节的模板。图 2展示了一下样本模板。将做好的新模板粘在黑方块里 


                   

第三步:也就是我们将要重点讲的一步。首先我们要为新的模板命名。我们会以上篇文章中的simpletest为例给大家讲解。

在上篇文章中讲到simpletest的例子中,我们需要把

char           *patt_name      = "Data/patt.hiro";代码改为char           *patt_name      = "Data/yourpatt.hiro";

其中,两行代码唯一的不同就是点patt和yourpatt,这就是识别出simpletest的标识卡和我们将要制作的标识卡,当然,你也可以把yourpatt换成别的英文名字。

其中制作标识卡的代码我将贴在下方

#if defined(__sgi)
char            *vconf = "-size=FULL";
#elif defined(__linux)
#  if defined(AR_INPUT_GSTREAMER)
char *vconf = "videotestsrc";
#  elif defined(AR_INPUT_V4L)
char            *vconf = "-width=640 -height=480";
#  elif defined(AR_INPUT_1394CAM)
char            *vconf = "-mode=640x480_YUV411";
#  elif defined(AR_INPUT_DV)
char            *vconf = "";
#  endif
#elif defined(_WIN32)
char *vconf = "Data\\WDM_camera_flipV.xml";
#elif defined(__APPLE__)
char *vconf = "-width=640 -height=480";
#else
char *vconf = "";
#endif


// Image acquisition.
static ARUint8 *gARTImage = NULL;
static ARUint8 *gARTsaveImage = NULL;


// Marker detection.
static int gARTThreshhold = 100;
static ARMarkerInfo* gTarget  = NULL;




// Drawing.
static ARParam gARTCparam;
static ARGL_CONTEXT_SETTINGS_REF gArglSettings = NULL;


void lineSeg(double x1, double y1, double x2, double y2, ARGL_CONTEXT_SETTINGS_REF contextSettings, ARParam cparam, double zoom)
{
int enable;
    float   ox, oy;
    double  xx1, yy1, xx2, yy2;

if (!contextSettings) return;
arglDistortionCompensationGet(contextSettings, &enable);
    if (arglDrawModeGet(contextSettings) == AR_DRAW_BY_TEXTURE_MAPPING && enable) {
        xx1 = x1;  yy1 = y1;
        xx2 = x2;  yy2 = y2;
    } else {
        arParamIdeal2Observ(cparam.dist_factor, x1, y1, &xx1, &yy1);
        arParamIdeal2Observ(cparam.dist_factor, x2, y2, &xx2, &yy2);
    }

    xx1 *= zoom; yy1 *= zoom;
    xx2 *= zoom; yy2 *= zoom;

ox = 0;
oy = cparam.ysize - 1;
glBegin(GL_LINES);
glVertex2f(ox + xx1, oy - yy1);
glVertex2f(ox + xx2, oy - yy2);
glEnd();
    glFlush();
}


static int setupCamera(ARParam *cparam)
{
    ARParam  wparam;
    char     name1[256], name2[256];
int xsize, ysize;


    printf("Enter camera parameter filename");
    printf("(Dat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值