클래스 설명 (Class info) - NabiEILAB/ProjectionMappingSimulator GitHub Wiki
https://github.com/NabiEILAB/ProjectionMappingSimulator/blob/master/wiki/ClassInfo/screenshot01.png
본 프로그램에서 크게 3개의 클래스를 직접 구현하여 이용한다.
ofApp 클래스 (ofApp Class)
openFrameworks 프로젝트 생성시 자동으로 생성되는 클래스로
본 프로그램에서 메인화면의 역할을 수행한다.
https://github.com/NabiEILAB/ProjectionMappingSimulator/blob/master/wiki/ClassInfo/screenshot02.png
렌더링을 담당하는 클래스로 ofBaseApp 클래스를 기반으로 하는 클래스이다.
그림에서와 같이 클래스는 첫 구동시 setup()함수를 단 한번 호출하고 난 뒤
update()와 draw()함수를 프로그램 종료시까지 계속 순서대로 반복호출 한다.
해당 클래스가 담당하는 화면이 포커싱이 되어있는 동안
마우스 버튼이나 키보드 버튼 이벤트는 수시로 체크되어 이벤트를 캐치해낼 수 있다.
https://github.com/NabiEILAB/ProjectionMappingSimulator/blob/master/wiki/ClassInfo/screenshot03.png
ofBaseApp의 형태로 ofApp 클래스는 내부에서 매 렌더링마다
3D 모델링, Projector 클래스 그리고 쉐이더 파일을 이용해
프로젝션 맵핑을 연산한 결과를 화면에 그리는 역할을 한다.
Projector 클래스 (Projector Class)
https://github.com/NabiEILAB/ProjectionMappingSimulator/blob/master/wiki/ClassInfo/screenshot04.png
Projector는 빔 프로젝터의 역할을 수행하는 클래스로
3차원의 가상공간의 빔 프로젝터라 생각하면 된다.
크게 XYZ 3차원상의 좌표와 회전값을 가지고 있으며
빔 프로젝터마다 로드되는 비디오 파일을 가진다.
비디오 영상의 텍스쳐 같은 경우는 모든 프로젝터마다 FBO라는 별도의 메모리
공간에 저장하게끔 설계되어 있다.
MappingApp 클래스 (MappingApp Class)
https://github.com/NabiEILAB/ProjectionMappingSimulator/blob/master/wiki/ClassInfo/screenshot05.png
MappingApp은 Projector 클래스와 연계하는데에 목적을 두는 클래스이다.
크게 빔 프로젝터의 스펙 리스트를 저장한 txt파일을 읽어들여
Projector 클래스에 스펙 정보에 맞게 비디오 영상의 크기를 조절하게 하며
또한 ofBaseApp 클래스 기반인 만큼 마우스 이벤트를 이용할 수 있다는 점을 활용하여
비디오 영상을 마우스로 왜곡시키는 '와핑'을 할 수 있게 한다.
왜곡된 영상 정보는 실시간으로 Projector 클래스로 전달이 된다.