Developing your First Application, Part 1 에 나와있는 함수 정보
1. init // 초기화 함수
static void init( void )
{
ARParam wparam;
/* open the video path */
if( arVideoOpen( vconf ) < 0 ) exit(0);
/* find the size of the window */
if( arVideoInqSize(&xsize, &ysize) < 0 ) exit(0);
printf("Image size (x,y) = (%d,%d)\n", xsize, ysize);
/* set the initial camera parameters */
if( arParamLoad(cparam_name, 1, &wparam) < 0 ) {
printf("Camera parameter load error !!\n");
exit(0);
}
arParamChangeSize( &wparam, xsize, ysize, &cparam );
arInitCparam( &cparam );
printf("*** Camera Parameter ***\n");
arParamDisp( &cparam );
if( (patt_id=arLoadPatt(patt_name)) < 0 ) {
printf("pattern load error !!\n");
exit(0);
}
/* open the graphics window */
argInit( &cparam, 1.0, 0, 0, 0, 0 );
}
①ARParam wparam;
AR 파라미터인 wparam을 정의. pram.h에 정의 되어 있다.
/** \struct ARParam
* \brief camera intrinsic parameters.
*
* This structure contains the main parameters for
* the intrinsic parameters of the camera
* representation. The camera used is a pinhole
* camera with standard parameters. User should
* consult a computer vision reference for more
* information. (e.g. Three-Dimensional Computer Vision
* (Artificial Intelligence) by Olivier Faugeras).
* \param xsize length of the image (in pixels).
* \param ysize height of the image (in pixels).
* \param mat perspective matrix (K).
* \param dist_factor radial distortions factor
* dist_factor[0]=x center of distortion
* dist_factor[1]=y center of distortion
* dist_factor[2]=distortion factor
* dist_factor[3]=scale factor
*/
typedef struct {
int xsize, ysize;
double mat[3][4];
double dist_factor[4];
} ARParam;
② if( arVideoOpen( vconf ) < 0 ) exit(0);
AR_DLL_API int arVideoOpen(char *config);
video.h에 보면 자세한 arVideoOpen에 대한 설명이 나와있다.
/**
* \brief open a video source.
*
* This function opens a video input path with the
* driver (and device) present on your platform.
* According to your operating system and the
* hardware the initialization will be different : a
* generic string structure is used for this issue.
* This function prepares the video stream for capture,
* but capture will not actually begin until arVideoCapStart
* is called.
* \param config string of the selected video configuration.
* See the <a href="video/">video configuration documentation</a>
* for more information on this parameter.
* \return 0 if successful, -1 if a video path couldn't be opened
*/
int arVideoOpen( char *config ) {
if( gVid != NULL ) {
printf("Device has been opened!!\n");
return -1;
}
gVid = ar2VideoOpen( config );
if( gVid == NULL ) return -1;
}
캡쳐 화면 오픈에 실패하면 -1을 리턴하므로 if( arVideoOpen( vconf ) < 0 ) exit(0);는 캡쳐 화면 오픈에 실패하였을때 종료하게 만드는 문장이다.
③ if( arVideoInqSize(&xsize, &ysize) < 0 ) exit(0);
arVideoInqSize역시 video.h에 함수에 대한 자세한 설명이 나와있다.
/**
* \brief get the video image size, in pixels.
*
* This function returns the size of the captured video frame, in
* pixels.
* \param x a pointer to the length of the captured image
* \param y a pointer to the width of the captured image
* \return 0 if the dimensions are found successfully, otherwise -1
*/
AR_DLL_API int arVideoInqSize(int *x, int *y);
소스는
int arVideoInqSize( int *x, int *y )
{
if( open_flag == 0 ) return(-1);
*x = image.Width();
*y = image.Height();
return(0);
}
if( arVideoInqSize(&xsize, &ysize) < 0 ) exit(0);
arVideoInqSize(&xsize, &ysize) 함수를 통해 사진의 사이즈를 입력받고 입력 받지 못했을 경우 프로그램을 종료(성공시 0, 실패시 -1을 리턴하므로) 시키는 문장.
④printf("Image size (x,y) = (%d,%d)\n", xsize, ysize);
앞서 입력 받은 이미지 사이즈를 콘솔창에 출력해준다.
⑤/* set the initial camera parameters */
if( arParamLoad(cparam_name, 1, &wparam) < 0 ) {
printf("Camera parameter load error !!\n");
exit(0);
}
arParamChangeSize( &wparam, xsize, ysize, &cparam );
arInitCparam( &cparam );
printf("*** Camera Parameter ***\n");
arParamDisp( &cparam );
주석에 달린 내용 대로 카메라 매개변수들을 초기화 해주는 내용일 것이다. 하지만 한 번 자세히 살펴보자.
ⓐarParamLoad(cparam_name, 1, &wparam)
역시 param.h에 보면 함수에 대한 자세한 설명이 나온다.
/** \fn int arParamLoad( const char *filename, int num, ARParam *param, ...)
* \brief load the camera intrinsic parameters.
*
* Load camera intrinsic parameters in the ARToolkit Library from
* a file (itself, an output of the calibration step).
* \param filename name of the parameters file.
* \param num number of variable arguments
* \param param result of the loaded parameters
* \return 0 if success, -1 if Error (file not found, file structure problem)
*/
int arParamLoad( const char *filename, int num, ARParam *param, ...);
자세한 소스는 paramFile.c(152) 에 있는데 소스 내용이.. -_-; 내 수준을 넘어섰다;; 라이브러리 만세!
헤더 파일에 있는 내용을 바탕으로 보면, cparam_name이 가르키는 곳에 저장된 정보를 num의 숫자 만큼 wparam에 복사해서 wparam을 설정해 주는듯!?
히밤 다 썼는데 다 날아가고 여기부터 다시 시작이군 -_-;;;;;
ⓑ arParamChangeSize( &wparam, xsize, ysize, &cparam );
/** \fn int arParamChangeSize( ARParam *source, int xsize, int ysize, ARParam *newparam )
* \brief change the camera size parameters.
*
* Change the size variable in camera intrinsic parameters.
* \param source name of the source parameters structure
* \param xsize new length size
* \param ysize new height size
* \param newparam name of the destination parameters structure.
* \return 0
*/
int arParamChangeSize( ARParam *source, int xsize, int ysize, ARParam *newparam );
wparam에 저장된 정보를 읽어와 xsize, ysize를 바꾸어서 cparam에 저장한다. xsize와 ysize는 콘솔창이 뜨고 나서 뜨는 설정창에서 설정한 값을 읽어오는듯 하며 cparam은 전역 변수로 잡혀있는 ARparam형식의 변수이다.
ARParam cparam; (32)
ⓒ arInitCparam( &cparam );
ar.h에 함수에 대한 자세한 설명이 나와있다.
/**
* \brief initialize camera parameters.
*
* set the camera parameters specified in the camera parameters structure
* *param to static memory in the AR library. These camera parameters are
* typically read from a data file at program startup. In the video-see through
* AR applications, the default camera parameters are sufficient, no camera
* calibration is needed.
* \param param the camera parameter structure
* \return always 0
*/
int arInitCparam( ARParam *param );
아래는 소스.
int arInitCparam( ARParam *param )
{
arImXsize = param->xsize;
arImYsize = param->ysize;
arParam = *param;
return(0);
}
cparam에 저장된 정보로 카메라 정보를 초기화한다.
ⓓ arParamDisp( &cparam );
/** \fn int arParamDisp( ARParam *param )
* \brief display parameters.
*
* Display the structure of the camera instrinsic parameters argument.
* \param param structure to display
* \return 0
*/
int arParamDisp( ARParam *param );
cparam에 저장된 정보를 콘솔창에 출력한다.
⑥
if( (patt_id=arLoadPatt(patt_name)) < 0 ) {
printf("pattern load error !!\n");
exit(0);
}
ⓐpatt_id : int형 전역 변수
int patt_id;
ⓑarLoadPatt(patt_name)
ar.h에 함수에 대한 정보가 나와있다.
/**
* \brief load markers description from a file
*
* load the bitmap pattern specified in the file filename into the pattern
* matching array for later use by the marker detection routines.
* \param filename name of the file containing the pattern bitmap to be loaded
* \return the identity number of the pattern loaded or -1 if the pattern load failed.
*/
int arLoadPatt( const char *filename );
패턴 정보를 읽어오는 함수. 패턴 정보를 읽는데 성공한다면 읽어온 패턴의 ID를 반환하고 만약 읽어오는데 실패하거나 저장된 패턴 정보가 없다면 -1을 반환한다.
⑦
/* open the graphics window */
argInit( &cparam, 1.0, 0, 0, 0, 0 );
gsub.h에 함수에 대한 자세한 정보가 나와있음.
/** \fn argInit( ARParam *cparam, double zoom, int fullFlag, int xwin, int ywin, int hmd_flag )
* \brief Initialise the gsub library
*
* This function performs required initialisation of the gsub library.
* It must be called before any other argl*() functions are called.
* \param cparam the intrinsics parameters of the camera (used to defined openGL perspective matrix)
* \param zoom defined a zoom parameter for the final result.
* \param fullFlag full screen mode (1 enable, 0 disable).
* \param xwin XXXBK. 0 if indifferent.
* \param ywin XXXBK. 0 if indifferent.
* \param hmd_flag enable stereo display mode (only interleaved configuration)
*/
void argInit( ARParam *cparam, double zoom, int fullFlag, int xwin, int ywin, int hmd_flag );
캡쳐 화면 출력창을 띄워주는 함수인듯
argl*() 함수를 미리 불러야 사용할 수 있다고 한다.
소스는 gsub.c(120)에 있는데 읽어봐도 모르겠다 -_-;;
'IT > ARtoolkit' 카테고리의 다른 글
ARToolKit 함수 찾기 (0) | 2010.02.16 |
---|---|
ARToolKit Documentation - Developing your first application, part1 : mainLoop 함수 (1) | 2010.02.16 |
ARToolKit 1 (0) | 2010.02.16 |
ARToolkit simpletest.c 설명 2/2 (0) | 2010.02.03 |
ARToolkit simpletest.c 설명1/2 (0) | 2010.02.03 |