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 |
---|