오픈프레임웍스

오픈프레임웍스()는 C++를 기반으로 한 오픈 소스 라이브러리로서 "창의적인 코딩"을 위해 디자인되었다. 오픈프레임웍스는 C++로 작성되었으며, 윈도우, Mac OS X, 리눅스에서 작동하는 크로스 플랫폼 소프트웨어 프레임워크이다. 오픈프레임웍스는 Zachary Lieberman, Theo Watson, Arturo Castro, 그리고 오픈프레임웍스 커뮤니티에 의해 공동 개발되었다.

역사 

오픈프레임웍스(OpenFrameworks) v0.01 은 Zachary Lieberman 에 의해 2005년 8월 3일에 릴리스되었다. 2006년 2월에 버전 v0.03은 뉴욕에서 [[Parsons School of Design]의 학생들에 의해서 사용되었다. 저자에 의하면 다음에 의하여 오픈프레임웍스는 개발되었다.
원문 :

(for) folks using computers for creative, artistic expression, and who would like low level access to the data inside of media in order manipulate, analyze or explore. That audience we felt was significantly underserved by the current crop of C++ libraries.

번역 :
컴퓨터를 사용해 창조적이고 예술적 표현, 그리고 미디어 데이터를 조작, 분석, 탐구 하기 위해 저수준 액세스를 좋아하는 사람들을 위해서 만들어졌다. 우리가 느끼기에 현재의 C++라이브러리는 이러한 일을 하기에는 적합하지가 않다.

특징 
오픈프레임웍스는 기존의 다양한 라이브러리를 통합하여 손쉽게 사용가능하도록 설계되어있다. 그래픽에는 오픈지엘이, 오디오 작동에는 rtAudio를, 글꼴에는 프리타입이, 이미지 작업에는 freeImage가, 그리고 비디오 재생에는 퀵타임이 사용되었다.

설치 
오픈프레임웍스는 별도의 IDE를 제공하지 않으며, 별도의 설치과정이 존재하지 않고, 소스 코드 형태로 제공이 된다. 오픈프레임웍스를 시작하는 과정은 다음과 같다.

 C++를 위한 컴파일러를 선택한다.
 자신의 운영 체제에 적합한 컴파일러/IDE를 다운로드하여 설치한다.
 최신 버전의 오픈프레임웍스 릴리즈를 다운받는다.

운영 체제별 IDE 설치 
 윈도:
윈도에서는 마이크로소프트 비주얼 스튜디오나, 오픈 소스로 제공되는 Code::Blocks를 설치한다.
 Codeblocks 설치
 VC++ 2008 가이드
 VC++ 2010 가이드

 맥 OSX:
맥 OSX 사용자는 Xcode를 설치하도록 한다.
 Xcode 가이드

 리눅스:
리눅스 사용자는 Code::Blocks를 설치하도록 한다.
 Code::Blocks 가이드

릴리즈 다운로드 
사용자들은 홈페이지 상의 다운로드 메뉴에서 최신 버전의 릴리즈를 내려받을 수 있다. 모든 버전은 운영 체제와 IDE에 따라 별도로 제공된다.

v0.05 버전 출시 이후로는 일반 버전과 FAT 버전으로 구분해서 제공된다. FAT 버전에서는 다양한 추가 기능(addons)이 포함되어 있다. 추가기능에는 openCV, 벡터 출력 및 연산, OSC, 네트워크 통신 등을 포함하고 있다.

오픈프레임웍스 구조 
오픈프레임웍스에는 다양한 소트프웨어 라이브러리가 통합되어 제공된다. 오픈프레임웍스의 다양한 함수와 클래스들은 이러한 내부 라이브러리 기능들을 쉽고 편리하게 사용할 수 있도록 제공한다.

폴더 구조 

오픈프레임웍스를 내려받으면, libraries, addOns, example 같은 일련의 폴더들을 발견할 수 있다. 각 폴더의 내용은 다음과 같다.

 addons - FAT 버전을 내려받으면, 다양한 추가 기능이 제공되는데, 그러한 추가 기능이 담겨 있는 폴더이다.

 apps - 직접 작성한 응용 프로그램이 저장되는 장소이며, 다양한 예제들이 포함되어 있다.

 libs - 오픈프레임웍스가 사용하는 코어와 함께 라이브러리가 담겨 있다.

오픈프레임웍스를 사용할 때 계층 구조를 유지하는 것이 매우 중요하다. 내려받은 패키지는 응용 소프트웨어가 내부 폴더들과 지역적으로 링크될 수 있도록 구성되어 있다. 만약 폴더들을 옮기거나, 변경하게 되면 컴파일이 되지 않을 수 있다.

새로운 프로젝트를 생성할 때는 apps 폴더 안의 examples 폴더의 예제 응용 프로그램들과 같은 폴더 구조를 띄어야 한다.

apps >  (예제와 같은)그룹 폴더 > 프로젝트 이름 > 프로젝트 파일

코드 구조 
오픈프레임웍스의 코드 구조는 다음과 같다.

 main.cpp : mail.cpp 파일은 c++ 컴파일러에게 어떠한 리소스를 프로그램 내에서 사용할 것인지를 알려주고, 프로그램을 실행시키는 역할을 한다.

 testApp : 실제 코딩은 testApp.h와 testApp.cpp 파일 내에서 이루어지게 된다. 사용자는 기본적으로 setup(), update(), draw() 함수를 사용할 수 있다. setup은 응용 프로그램이 실행되는 순간에 한번만 실행되며, 다양한 변수와 업데이트가 필요하지 않은 설정들을 선언하는 부분이다. update 함수는 매 프레임별로 지속적으로 작동한다. 하지만 내부에 드로잉 함수를 호출 할 수 없고, 실제 매 프레임 드로잉되는 함수들은 draw함수에 포함시켜야 한다.

헬로 월드 

가장 기본적인 응용 프로그램 작성을 위해 examples 폴더 내의 emptyProject 프로젝트를 실행한다. 가장 기본적인 헬로월드 프로그래밍은 testApp.cpp 파일 내의 setup()함수를 다음과 작성하면 된다.
void ofApp::setup(){
	cout << "Hello World" << endl ;
}
하지만 다음의 코드가 오픈프레임웍스의 언어를 잘 표현해 주는 좋은 예라고 할 수 있다.
//ofApp.h
#ifndef _OF_APP
#define _OF_APP

#include "ofMain.h"

class ofApp : public ofBaseApp{

	public:

		void setup();
		void update();
		void draw();

		ofTrueTypeFont font;

};

//ofApp.cpp
#include "ofApp.h"
//--------------------------------------------------------------
void ofApp::setup(){

	font.loadFont("myFont.ttf", 32);
}
//--------------------------------------------------------------
void ofApp::update(){
}

//--------------------------------------------------------------
void ofApp::draw(){
	ofSetColor(0x00FF00);
	font.drawString("Hello World", 100,100);
}

추가 기능(addons) 
오픈프레임웍스에는 기본 라이브러리 이외에도 다양한 추가 기능이 제공된다. FAT 버전을 다운받게 되면 addons 폴더 안에 추가 기능이 기본적으로 설치가 된다. 기본적으로 설치되는 추가 기능은 다음과 같다.

 ofxDirList : 디렉터리 내부의 내용을 나열해서 보여 준다.
 ofxXmlSettings : xml 파일을 저장하고 불러온다.
 ofxOsc : OSC 프로토콜을 사용한 통신을 돕는다.
 ofxOpenCv : 인텔 OpenCV 라이브러리를 통한 컴퓨터 비전의 사용을 지원한다.
 ofxNetwork : UDP와 TCP 통신을 통한 크로스 플랫폼 네트워크를 위 코드를 포함한다.
 ofxThread : 크로스 플랫폼 스레드 관리를 위한 코드를 포함한다.
 ofxVectorMath : 벡터 계산을 위한 개체를 포함한다.
 ofxVectorGraphics : CreEPS를 위한 내용을 포함한다.
 ofx3dModelLoader : 3차원 모델을 불러오고 보여주는 기능을 제공한다.

각주

라이선스 정책 
오픈프레임웍스는 MIT 허가서아래에 관리된다. 프레임워크에 사용된 라이브러리는 각각의 자신들의 라이선스를 가지고 있다.

관련 프로젝트 
 graffiti analysis project - Evan Roth
 audio space - Theodore Watson
 drawn - Zach Lieberman
 colors - Cory Arcangel
 re-gaze - Chris Sugrue
 L.A.S.E.R. Tag - Theo Watson/Graffiti Research Lab
 EyeWriter - Free Art and Technology (F.A.T.), 오픈프레임웍스, Graffiti Research Lab, The Ebeling Group, TEMPTONE
 Magic Torch - Alberto Garc√≠a, Julio Obellerio, Mart√≠n Nadal , Alberto Cort√©s
 Memento - Jeldrik Schmuch, Ulrike Gollner
 Le Sacre du Printemps - Klaus Obermaier, Ars Electronica Futurelab, Chris Sugrue, and Matthias Bauer.
 TouchKit Multitouch System - NOR_/D

참고 

 프로세싱 - 자바 기반의 프로그램으로, 전자예술이나 비주얼 디자인 커뮤니티를 위하여 제작되었다.
 신더 - C++ 기반의 프레임워크로, 보다 진보된 시각화가 가능하다.

외부 링크 
 openFrameworks.cc
 openFrameworks forum

C++ 라이브러리
3차원 컴퓨터 그래픽스
API
MIT 라이선스 소프트웨어
자유 라이브러리