niedziela, 9 stycznia 2011

openFrameworks - kreatywne programowanie

Creative coding - czyli w wolnym tłumaczeniu "kreatywne programowanie". To pojęcie jest niezwykle obszerne, jednak wiąże się zazwyczaj z ciekawym użyciem grafiki, dźwięku itp. Dlatego niezwykle istotnym dla procesu takiego pisania jest skupienie się na tym co ma robić i jak ma wyglądać a nie na "ujarzmieniu" API. Z tego powodu powstają specjalnie w tym celu napisane biblioteki aby można było kreatywnie programować nie przejmując niskopoziomowymi detalami.

Przykładem tego jest Processing (dla JAVY, chociaż jest to nie tylko biblioteka ale również IDE), Microsoft pracuje na Vedea(dla .Net). A dla C++ jest właśnie openFrameworks.

Samo openFrameworks jest zbiorem różnych bibliotek opakowanych w klasy/funkcje tak aby ich użycie było jak najprostsze. Zawiera biblioteki do obsługi grafiki, dźwięku i video oraz posiada system dodatków do rozszerzenia możliwości a żeby nie robić z tego suchego wywodu trochę kodu.

Struktura podstawowego programu w of składa się z 3 plików:

  1. main.cpp - jak sama nazwa wskazuje główny plik (służy podstawowej inicjalizacji) który tworzy się raz i pozostawia bez zmian
  2. Plik *.h głównej klasy
  3. Plik *.cpp głównej klasy


Oczywiście jest to tzw. niezbędne minimum jednak w razie potrzeby tworzy się dodatkowe pliki z klasami :)

Najpierw najkrótszy czyli main.cpp:

#include "ofMain.h"

#include "testApp.h"

#include "ofAppGlutWindow.h"

//========================================================================

int main( ){

    ofAppGlutWindow window;

    ofSetupOpenGL(&window, 1024,768, OF_WINDOW);

    ofRunApp( new testApp()); //testApp - to jest nasza główna klasa

}


Jak widać po kodzie openFrameworks opiera się na OpenGL i GLUT (co jest moim zdaniem złe ale cóż :P). Pominę nagłówek klasy (aby nie zajmować miejsca):

#include "testApp.h"

//--------------------------------------------------------------

void testApp::setup(){

    ofBackground(255, 255, 255);

    ofSetWindowTitle("openFrameworks test");

    ofSetFrameRate(60);

    counter = 0;

}

//--------------------------------------------------------------

void testApp::update(){

    counter += ofGetLastFrameTime();

}

//--------------------------------------------------------------

void testApp::draw(){

    double angle = counter * 180.0;

    ofSetColor(30, 85, 210);

    ofFill();

  

    ofPushMatrix();

    ofTranslate(ofGetWidth()/2.0, ofGetHeight()/2.0);

    ofRotate(angle);

    ofCircle(0, ofGetHeight()/2.0,50);

    ofPopMatrix();

    ofSetColor(0,0,0);

    ofNoFill();

    ofRect(500, 500, 100, 100);

    ofEnableAlphaBlending();

    ofFill();

    ofSetColor(220, 30, 0, (int)(counter * 100.0) % 255);

    ofTriangle(120, 120, 60, 250, 180, 250);

}


Sam program nie jest istotny (jest banalny, pokazuje tylko jak wygląda API graficzne w of) istotniejsze jest kod w którym można dojrzeć cechy charakterystyczne dla tego typu bibliotek. Program podzielony jest na 3 główne funkcje: setup(inicjalizacja), update(logika), draw(rysowanie), podstawowe funkcje do obsługi rysowania nie posiadają klas i nie wymagają przekazywani uchwytów ani wskaźników. Całość jest intuicyjna i prosta. Można zacząć w ciągu chwili i szybko zobaczyć efekty.

Aktualne wersja openFrameworks nie posiada żadnych funkcji do rysowania 3D jednak można bezproblemowo używać funkcji OpenGL (trzeba pamiętać o ustawieniu macierzy widoku) + są dodatki które udostępniają trochę funkcjonalności w tym zakresie. Warto dodać, że cała biblioteka aktualnie znajduje się w wersji pre release i jeszcze może się w niej dużo zmienić (oby na lepsze).

Na zakończenie dodam, że np. Processing (i myślę, że pozostałe biblioteki do kreatywnego programowania biorą to pod uwagę) nie powstał z myślą o programistach a o ludziach którzy chcą się programowania nauczyć albo po prostu potrzebują przetwarzać dane (głównie jednak wizualne) w sposób który gotowe programy nie umożliwiają.

Brak komentarzy: