ARToolKit 메서드 - http://artoolkit.sourceforge.net/apidoc/index.html

http://www.artoolworks.com/support/doc/artoolkit4/apiref/ar_h/index.html#top

 

위 사이트에 모든 메서드가 다 나와있다.

추가적으로 궁금한건 사이트를 참고하시구요

 

 

기존에 개발한 증강현실 정맥주사 실습 시스템에 들어가는 메서드만 정리하도록 하겠습니다.

 - 추측과 불확실한 정보가 일부 있습니다.


 

 

int setupCamera 메서드 - 감이오죠?......

int arVideoOpen(char *config)

  - 말그대로 arVideo열기, 내부 인자로는 비디오 경로가 들어간다

  - 리턴형은 0과 -1로 0은 성공, -1은 실패로 비디오 경로설정이 잘못된 경우

 

int arVideoGetSize(int x, int y)

  - 메서드 문서에는 나와있지 않은데, 딱보면 비디오 사이즈를 리턴하는 듯?!

  - 리턴형은 역시 0과 -1로 0은 성공, -1은 실패

 

arVideoGetPixelFormat(void)

  - 안나와있네잉

  - 카메라의 픽셀정보를 가져오는것 같다 (불확실, 추측)

 

int arParamLoad(const char *filename, int num, ARParam *param, ....)

  - filename : 카메라 캘리브레이션 한 파라미터 파일 이름

  - num : 변수의 개수 그냥 1로 하나부다

  - param : 로딩 파라미터 결과

  - 카메라 캘리브레이션 결과 불러오는 메서드

  - 리턴형은 0과 -1로, 0은 성공, -1은 실패

 

int arParamChangeSize(ARParam *source, int xsize, int ysize, ARParam *newParam)

  - source : 원래 파라미터의 이름

  - xsize : 너비

  - ysize : 높이

  - newParam : 목표 파라미터의 이름

  - 카메라 사이즈 변경하는 메서드

  - 리턴은 무조건 0

 

int arParamDisp(ARParam *param)

  - param : 디스플레이 구조체 파라미터

  - 카메라 파라미터의 구조를 디스플레이, 걍 어련히 해야되는거

  - 리턴은 무조건 0

 

ARHandle *arCreateHandle(ARParam *param)

  - param : 이 파라미터는 캘리브레이션 파라미터를 얘기합니다

  - 트랙킹 인스턴스를 만드는거에염

 

int arSetPixelFormat(ARHandle *handle, AR_PIXEL_FORMAT pixFormat);

  - handle : 픽셀형식

  - pixFormat : ARToolkit 디텍션 루틴으로 처리된 픽셀 형식 위에 arVideoGetPixel로 처리된걸 인자로 사용

  - 마커디텍팅을 위해 픽셀형식을 맞추는 메서드

  - 에러가 없다면 0을 리턴

 

int arSetDebugMode(ARHandle *handle, int mode)

  - handle : 설정된 ARTracker(handle)가 디버그 모드로 작동한다

  - mode : 요기에는 두개의 파라미터가 들어간다

   * AR_DEBUG_DISABLE, AR_DEBUG_ENABLE(기본)

  - 디버그모드를 쓸것이냐, 말것이냐 설정 : 여기서는 안쓰는걸로 되어있다

 

int arSetImageProcMode(ARHandle *handle, int mode)

  - handle : 현재 handle이 이미지처리 모드로 들어가게 된다

  - mode : 요기에는 두가지 파라미터가 있다

   * AR_IMAGE_PROC_FRAME_IMAGE(기본), AR_IMAGE_PROC_FIELD_IMAGE

   * 프레임 이미지는 각 프레임 전체에서 마커를 찾는 방식

   * 필드 이미지는 매 초마다 행과 열로 픽셀을 검사하는 방식 빠르고 좋다

   * 그런데 이 필드이미지는 지원하는 카메라가 별로 없나보다

  - 이미지처리 모드

  - 에러가 없다면 0리턴

 

AR3DHandle *ar3DCreateHandle(ARParam *arParam)

  - 어머나 아무정보가없네

 

int ARVideoCapStart(void)

  - 비디오 캡쳐를 시작!

  - 요고는 ARVideoCapStop과 쌍으로 쓰는겁니다

  - 0은 성공, -1은 실패

 

 

main 메서드 

argl이 접두어로 붙는건 gsub_lite.h가 포함되어야 한다.

arglSetupForCurrentContext(ARHandle *ARHandle);

  - 요고를 호출해야 artoolkit에서 opengl을 사용할 수 있게 된다

  - gsub_lite 라이브러리 초기화 단계

 

arUtilTimerReset(void);

  - ARToolKit의 내부 타이머를 리셋

  - arUtilTimer()를 리셋

 

 

debugReportMode 메서드

argetImageProcMode(ARHandle *handle, int *mode);

  - 이미지 처리 모드 시작

  - handle : ARTracker 핸들

  - mode : 이미지 처리모드 아까 거기서 봤던 프레임인지 필드인지

 

arglDrawModeGet(ARGL_CONTEXT_SETTINGS_REF contextSettings);

  - arglDispImage()의 픽셀을 가져온다

  - AR_DRAW_BY_GL_DRAW_PIXELS랑 AR_DRAW_BY_TEXTURE_MAPPING 두개가있다

   * DRAW_PIXELS는 OpenGL의 DrawPixel 메서드를 이용해서 픽셀을 가져오고

   * TEXTURE_MAPPING은 OpenGL의 TexImage2D메서드를 이용해서 픽셀을 가져온다

 

arglTexmapModeSet(ARGL_CONTEXT_SETTINGS_REF contextSettings, const int mode);

  - TexImage2D의 픽셀 가져오는걸 전체를 가져올지 반만 가져올지 설정

  - arglDrawModeGet(AR_DRAW_BY_TEXTURE_MAPPING)으로 콜 됐을때만 필요

   * AR_DRAW_TEXTURE_FULL_IMAGE, AR_DRAW_TEXTURE_HALF_IMAGE가 있음

 

argetPatternDetectionMode(ARHandle *handle, int *mode);

  - handle : ARTracker 핸들

  - mode : 마커 패턴 검출 모드 설정

   * 마커 패턴 검출 모드엔 세가지가 있음

   * AR_TEMPLATE_MATCHING_COLOR : 색을 기반으로 검출

   * AR_TEMPLATE_MATCHING_MONO : 모노 매칭..?

   * AR_MATRIX_CODE_DETECTION : 매트릭스 코드 검출

 

디버그 리포트 모드는 ARToolkit Tracker의 상태를 보여주는 메서드!

 

 

setupMarkersObject 메서드 - 이것이 영상으로 대체되겠지?

이 메서드 안에

read_OSGData 메서드 - 전체 오브젝트 로드, 마커랑 비트맵파일

arPattCreateHandle(void)

  - 패턴 할당

  - 에러 발생할 경우 NULL리턴

 

arOSGinit(void);

  - arOSG 함수를 이용하기 위해 초기화 하는 단계

  - 새로운 arOSG 구조 포인터 얻기!

 

arOSGLoadModel(AROSG *arOsg, const char *modelDescriptionFilePath);

  - OSG모델을 로드한다

  - modelDescriptionFilePath : model description file의 경로 설정

   * model description file : OSG모델이 로드되면 모델의 회전, 크기, 변형 정보를 담고있다

  - arOsg : arOSG의 포인터로 arOSG의 구조가 포함된다

  - 로드된 모델의 인덱스 값이 리턴된다, 에러나면 0리턴

 

arPattLoad(ARPattHandle *PattHandle, const char *filename);

  - 패턴핸들로부터 패턴을 읽어온다

  - pattHandle : 패턴핸들 위에 arPattCreateHandle로 만들어진 패턴할당내용

  - filename : 패턴파일의 경로 - 상대경로

  - 로드 된 패턴의 인덱스를 읽어온다, -1을 리턴할 경우는 최대치보다 많은 패턴이 있어서 못읽어온 경우, AR_PATT_NUM_MAX를 리턴할 경우 이미 한번 읽어온 핸들을 또 읽을 경우 리턴

 

이 read_OSGData 메서드는 마커, 마커 설정파일, OSG이미지(3D오브젝트)를 읽어오고 마커의 가로세로를 파악하는 메서드이다, 로드가 제대로 되지 않으면 바로 메모리를 해제하는 기능까지!

 

마커로드가 끝났으니까 다시 setupMarkersObject로 돌아가서

arPattAttach(ARHandle *ARHandle, ARPattHandle *pattHandle);

  - 패턴세트들을 ARHandle에 연결한다

  - 이렇게 해서 마커들을 ARHandle이 인식할 수 있게 한다

 

arSetLabelingMode(ARHandle *handle, int mode);

  - 검은색과 하얀색 마커를 검출할 수 있게 한다

  - 핸들은 이제 알거니까 더 쓰지 않구

  - mode : 옵션 설정 - AR_LABELING_WHITE_REGION, AR_LABELING_BLACK_REGION

   * 하얀걸로 인식할거냐, 까만걸로 인식할거냐 설정,, 기본은 검정색

 

setupMarkersObject 메서드는 마커와 기타 객체를 로드하고 ARHandle에 연결하기까지의 과정

 

 

flitersSetup 메서드

arMallocClear(V, T, S);

  - 필터의 메모리를 비운다

  - #define arMallocClear(V,T,S) { if(((V) = (T*)calloc((S), sizeof(T))) == NULL) }

  - 일단 메모리 해제부터 시켜서 쓰레기 정보를 없애는 작업을 하는 것 같다.

 

arFilterTransMatInit(const ARdouble samplerate, const ARdouble cutoffFreq)

  - 필터 공간을 계산하고 필터 데이터 구조를 만든다

  - samplerate : 카메라 프레임 rate같은 것으로, 얼마만큼의 크기로 필터를 정할 것인가 하는 수치, 0.0 이상의 수치가 들어가야 한다

  - cutoffFreq : 필터링에 입력되는 대상 중 매트릭스 변환이 일어나지 않았으면 하는 범위? 아직 잘 이해는 안된다, 0.0이상의 수치가 들어가야 한다.

  - NULL 리턴은 에러, ARFilterTransMatinfo 구조의 포인터로 다른 필터를 통과한 결과를 내놓는다

 

filtersetup 메서드는 gFilters라는 새로운 필터를 하나 만들어낸다

왜 만드는지는 잘 모르겠다.


filtersUpdate 메서드

arFilterTransMatSetParams(ARFilterTransMatInfo *ftmi, const ARDouble sampleRate, const ARDouble cutoffFreq);

  - 필터파라미터를 준비한다

  - ftmi : 필터 세트

  - sampleRate : 0.0이상이 들어가야하구, AR_FILTER_TRANS_MAT_SAMPLE_RATE_DEFAULT로 기본값

  - cutoffFreq : 이것도 0.0이상이 들어가야하구, AR_FILTER_TRANS_MAT_CUTOFF_FREQ_DEFAULT가 기본값

  - 0 에러없음, -1 알수없는 파라미터, -2 두 파라미터중 0.0이 있다

 

새로운 파라미터들로 업데이트한다

 

 

glutDisplayFunc(Display) - Display 메서드

arglDispImage(ARUint8 *image, const ARParam *cparam, const double zoom, ARGL_CONTEXT_SETTINGS_REF contextSettings);

  - ARVideo 이미지를 생성한다, OpenGL 기반

  - image : arVideoGetImage() 메서드를 통해 얻어진 이미지데이터, 메인루프에서 얻어온다

  - cparam : 이 포인터는 ARToolkit 카메라 파라미터로 현재 비디오 소스를 의미한다.

  - zoom : 이미지 확대여부, 1.0이 기본 최대 2.0

  - contextSettings : arglSetupForCurrentContext()를 통해 얻은 ARGL의 세팅정보를 리턴

 

arglCameraFrustumRH(const ARParam *cparam, const double focalmin, const double focalmax, GLdouble m_projection[16]);

  - OpenGL 투영행렬 생성

  - cparam : 현재 비디오 소스의 카메라 파라미터

  - focalmin : 카메라 표시 최소거리

  - focalmax : 카메라 표시 최대거리

  - m_projection[16] : 투영행렬이 들어갈 자리

 

arOSGSetProjection(AROSG *arOsg, double p[16]);

  - OSG를 그릴때의 투영행렬 정의

  - arOSG : arOsgInit()으로 초기화된 AROsg 구조

  - p[16] : 4*4 투영변환행렬

 

arOSGSetModelVisibility(AROSG *arOsg, const int index, const int visible);

  - OSG모델을 보여줄지 말지 설정

  - arOSG : AROSG 구조

  - index : osg모델 인덱스 arOsgLoadModel() 호출 때 로드된 모델들의 인덱스 중

  - 0 리턴, 그보다 작으면 에러

 

arglCameraViewRH(const double para[3][4], GLdouble m_modelView[16], const double scale);

  - OpenGL 뷰 행렬 생성

  - para : 3*4 마커의 위치 행렬

  - m_modelView[16] : OpenGL에 맞는 모델뷰 행렬로 채워진다 (뭐지?)

  - scale : arToolkit 유닛과 OpenGL 유닛 사이를 조정하는데, 뭘 조정하냐면, OpenGL 함수로 그릴 지 ARToolkit 유닛으로 그릴지 정한다. 1.0이면 OpenGL ,,, 맞나?

 

arOSGSetModelPose(AROSG *arOsg, const int index, const double modelView[16]);

  - osg모델의 위치 설정

  - ARosg : AROSG 구조

  - index  : 모델 인덱스

  - modelView[16] : 4*4 변환행렬

  - 0리턴, 그보다 작으면 에러

 

arOSGDraw(AROSG *arOsg);

  - 뷰, 투영, 모델뷰 행렬을 통해 osg모델을 그린다

  - 0리턴, 그보다 작으면 에러

 

arGetLabelingThreshMode(const ARHandle *handle, AR_LABELING_THRESH_MODE *mode_p);

  - handle : 현재 ARTracker

  - mode_p : 라벨링 문턱치를 어떻게 할 것이냐

   * AR_LABELING_THRESH_MODE_MANUAL, AR_LABELING_THRESH_MODE_AUTO_MEDIAN, AR_LABELING_THRESH_MODE_AUTO_OTSU, AR_LABELING_THRESH_MODE_AUTO_ADAPTIVE 요런 방법들이 있음 

 

 

glutReshapeFunc(Reshape) - Reshape 메서드

arOSGHandleReshape(AROsg *arOsg, const int w, const int h);

  - OSG화면 재구성 (윈도우 화면이 변경되었을 때 내부 재구성)

  - arOsg : arOsg 구조

  - w : 너비 픽셀

  - h : 높이 픽셀

 

mainLoop 메서드

아무 응답이 없을 때 실행되는 메서드 : glutIdleFunc(mainLoop) 함수로 인해서

arVideoGetImage(void);

  - 현재 비디오 이미지 획득

 

arUtilTimer(void);

  - 타이머를 리셋 한 후의 경과시간을 리턴한다 (밀리세컨드 단위)

  - arUtilTimerReset(void) 위에있옹

 

arDetectMarker(ARHandle *arHandle, ARUint8 *dataPtr);

  - 비디오프레임에서 마커를 검출해낸다

  - arHandle : 알잖여 마커, 카메라 파라미터, 디텍션정보 등이 담긴 arHandle

  - dataPtr : 포인터로, 메모리 블록의 첫번째 바이트는 이미지에 포함된 픽셀데이터로 마커 디텍션에 처리된다, 이 이미지의 픽셀 형식은 arSetPixelFormat();에 정의되어있다. 이미지의 너비와 높이는 arHandle의 카메라 파라미터의 xsize, ysize로 명시되어있다.

  - 0리턴 에러없음, 0보다 작으면 에러 

 

arGetTransMatSquare(AR3DHandle *handle, ARMarkerInfo *marker_info, ARDouble width, ARdouble conv[3][4]);

  - 흐어엉 정보가없엉

 

arGetTransMatSquareCont(AR3Dhandle *handle, ARMarkerInfo *marker_info, ARDouble initConv[3][4], ARDouble width, ARdouble conv[3][4]);

  - 역시 정보가 없어

  - 보아하니 둘 다 마커와 실제 카메라 사이에서 행렬변환을 하는거 같은데 왜하는거지?

 

arFilterTransMat(ARFilterTransMatInfo *ftmi, ARDouble m[3][4], const int reset);

  - 필터함수를 통해 행렬을 변환시킨다

  - ftmi : 필터정보

  - m[3][4] : 변환될 현재 행렬

  - reset : 1이나 0인데, 리셋안할거면 0이야, 리셋은 1인데 1을 하는 상황이 어떤 상황이냐면 비연속적인 변환행렬에서 계산을 하다보면 필터 초기화 상태거나 메모리가 필터와 같은값으로 세팅 될 경우 1로 해두면 에러안나고 그냥 하던일 마저한다

 

 

Keyboard 메서드 - 키보드가 눌릴 때 실행되는 메서드

arglDrawModeGet(ARGL_CONTEXT_SETTINGS_REF contextSettings);

  - arglDispImage() 메서드에서 픽셀들을 가져온다

  - arglDrawModeSet() 과 한세트

 

arglDrawModeSet(ARGL_CONTEXT_SETTINGS_REF contextSettings, const int mode);

  - arglDispImage() 메서드에서 픽셀들을 세트한다

  - 가져온 픽셀들로 OpenGL을 이용해 디스플레이한다

  - contextSettings : ar의 세팅정보내용

  - mode : 기본 AR_DRAW_BY_TEXTURE_MAPPING, AR_DRAW_BY_GL_DRAW_PIXELS

   * Draw_Pixels : OpenGL DrawPixel 메서드로 그려낸다

   * Texture_Mapping : OpenGL TexImage2D로 그려낸다

 

arglTexmapModeGet(ARGL_CONTEXT_SETTINGS_REF contextSettings);

  - 풀이나 반해상도 둘 중 어느 해상도로 2D텍스쳐를 씌울거냐 선택하기 전 context정보를 가져온다

  - contextSettings : ar의 세팅정보 내용

 

arglTexmapModeSet(ARGL_CONTEXT_SETTINGS_REF contextSettings, const int mode);

  - arglDispImage() 메서드로부터 풀이나 반해상도 둘 중 어느 해상도로 2D텍스쳐를 씌울것인지 선택한다

  - 이 메서드는 arglDrawModeSet() 메서드에서 AR_DRAW_BY_TEXTURE_MAPPING으로 선택되었을 때만 적용된다

  - contextSettings : ar의 세팅정보 내용

  - mode : AR_DRAW_TEXTURE_FULL_IMAGE, AR_DRAW_TEXTURE_HALF
_IMAGE가 있다

'Augmented Reality > ARToolKit' 카테고리의 다른 글

ARToolKit - 설치방법  (2) 2014.06.10
Posted by 긍정왕오킹