오픈프레임웍스

**오픈프레임웍스**()는 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]의 학생들에 의해서 사용되었다. 저자에 의하면 다음에 의하여 오픈프레임웍스는 개발되었다.
<blockquote>
원문 :<br />

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

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

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

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

### 운영 체제별 IDE 설치
* **윈도우**:
:윈도우에서는 마이크로소프트 비주얼 스튜디오나, QT Creator를 설치한다.
:* VS < 2017, 2019 가이드
:* QT Creator 설치 가이드

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

* **리눅스**:
:리눅스 사용자는 Qt Creator를 설치하도록 한다.
:* 리눅스 설치 가이드
:* QT Creator 설치 가이드
:* 2019년부터 한 유저의 기여로 vscode를 위한 템플릿 또한 공식 배포판의 projectGenerator에 추가되었다. (포럼 링크)
***라즈베리파이:**
:라즈베리파이 사용자를 위해서는 라즈베리파이 재단에서 제공하는 공식 운영 체제인 라즈비안 혹은 아치 리눅스가 공식 지원된다.
:* 라즈비안 설치 가이드
:* 아치 리눅스 설치 가이드

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

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

현재는 일반 버전과 FAT 버전의 구분이 사라지고 addons를 포함하여 해당 운영체제에서 제공되는 추가 기능이 단일한 공식 릴리즈에 포함되었다.

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

### 폴더 구조

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

* *addons* - openCV, OSC 등의 다양한 추가 기능이 제공되는데, 그러한 추가 기능이 담겨 있는 폴더이다. 사용자들이 직접 만든 다양한 addons를 한 눈에 볼 수 있는 별도의 페이지가 존재한다.

* *apps* - 직접 작성한 프로젝트들이 저장되는 폴더이다.
* *examples -* 다양한 예제가 저장되어 있다. 이 예제들을 통해 오픈프레임웍스를 처음 접하는 사용자가 스스로 학습할 수 있다.

* *libs* - 오픈프레임웍스가 사용하는 코어와 함께 라이브러리가 담겨 있다.
* *scripts -* 기본 템플릿 등의 개발 환경을 설정할 수 있는 스크립트들이 포함되어 있다.

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

새로운 프로젝트를 생성할 때는 apps 폴더 안의 examples 폴더의 예제 응용 프로그램들과 같은 폴더 구조를 띄어야 한다. 오픈프레임웍스를 다운로드 할 때 함께 포함되어 있는 projectGenerator를 사용하면 알맞은 계층 구조에 맞춰 프로젝트가 생성된다. 윈도우에서 비주얼 스튜디오를 사용하는 사용자는 별도의 절차를 통해 새로운 프로젝트를 생성할 수 있다.

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

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

* ofApp : 실제 코딩은 ofApp.h와 ofApp.cpp 파일 내에서 이루어지게 된다. 사용자는 기본적으로 setup(), update(), draw() 와 기본으로 포함되어 있는 다양한 마우스, 키보드 입력 함수를 사용할 수 있다.
** setup 함수는 응용 프로그램이 실행되는 순간에 한번만 실행되며, 다양한 변수와 업데이트가 필요하지 않은 설정들을 선언하는 부분이다.
** update 함수는 매 프레임별로 지속적으로 실행된다. 하지만 드로잉에 직접적으로 관여하는 함수들, 가령 ofDrawCircle() 와 같은 함수들은 아래의 draw 함수 내에서 호출되어야 한다.
** draw 함수 또한 매 프레임마다 반복적으로 실행된다. 그러나 이 함수 내부에 작성된 코드들만 실질적인 드로잉에 관여하게 된다는 점에서 다르다.

### 헬로 월드

가장 기본적인 응용 프로그램 작성을 위해 apps/myApps 폴더 내의 emptyProject 프로젝트를 실행한다. 가장 기본적인 헬로월드 프로그래밍은 ofApp.cpp 파일 내의 setup()함수를 다음과 작성하면 된다.

```cpp
void ofApp::setup(){
	cout << "Hello World" << endl ;
}
```

하지만 다음의 코드가 오픈프레임웍스의 언어를 잘 표현해 주는 좋은 예라고 할 수 있다.

아래의 코드를 실행하기 위해서는 프로젝트 폴더 내 **bin/data**에 폰트 파일을 넣어야 한다. 본인이 원하는 폰트를 사용하면 된다.

```cpp
//ofApp.h
#pragma once

#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("verdana.ttf", 32);
}
//--------------------------------------------------------------
void ofApp::update(){
}

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


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

* ofxAssimpModelLoader : 3ds, obj 등의 3D 모델링 데이터를 로드하고 관리한다.
* ofxXmlSettings : xml 파일을 저장하고 불러온다.
* ofxOsc : OSC 프로토콜을 사용한 통신을 돕는다.
* ofxOpenCv : 인텔 OpenCV 라이브러리를 통한 컴퓨터 비전의 사용을 지원한다.
* ofxNetwork : UDP와 TCP 통신을 통한 크로스 플랫폼 네트워크를 위 코드를 포함한다.
* ofxVectorGraphics : CreEPS를 위한 내용을 포함한다.
* ofxGui: 그래픽 유저 인터페이스를 만들어 사용할 수 있도록 돕는다.
* ofxKinect: MS에서 엑스박스와 함께 개발한 키넥트 센서를 사용할 수 있도록 한다.

#### 각주


## 라이선스 정책
오픈프레임웍스는 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 라이선스 소프트웨어
분류:자유 라이브러리