Cinder jest biblioteką wspomagającą programistę w tworzeniu kreatywnego oprogramowania. Skupia się na ułatwieniu wszelkich operacji związanych z wizualnym aspektem programu. Poprzez liczne dodatki – bloki, niesamowicie przyspiesza realizację projektu.
Krótki wykład pokazujący możliwości tej biblioteki, prowadzony przez twórcę, Andrew Bell’a.
Obecnie duży wkład w rozwój ma firma Barbarian Group.
Drobne wtrącenie nie związane z projektem
Od długiego czasu używam ciekawego rozszerzenia konsoli pod Windows. Nazywa się Cmder. Jest niezwykle przydatnym i wygodnym rozwiązaniem. To namiastka terminala linuxowego dodatkowo, dzieki cechom ConEmu dostarczająca rozwiązań a’la Terminator(split windows). Do tego dochodzi jeszcze FarManager, co czyni to środowisko niemal doskonałym. Piszę o tym tylko dlatego, że przyjemnie jest mieć wygodne środowisko w trakcie tworzenia oprogramowania.
Instalacja Cinder
Zdecydowałem się na wersję z github’a. Klonuję repozytorium
git clone --recursive https://github.com/cinder/Cinder.git
Do tego w podkatalogu instaluję moduł OpenCV. Wersję z rodziny 3.x.
cd blocks git clone --depth 1 https://github.com/cinder/Cinder-OpenCV3.git # tak zwana płytka kopia, wystarczy mi ostatnia rewizja
Pod Visual Studio 2013 ładuję solution – vc2013\cinder.sln i kompiluję. Jeśli wszystko przebiegło pomyślnie, to mamy gotową bibliotekę. Teraz pozostaje przygotowanie projektu. Tutaj z pomocą przychodzi narzędzie TinderBox (Cinder\tools\TinderBox-Win). Jest to generator projektu, który utworzy właściwą strukturę katalogów, ścieżki do bibliotek (release i debug) i ewentualnie lokalne repo gita. Znacząco przyspiesza rozpoczęcie pracy.
Projekt bazuje na szablonie Basic OpenGL, wcześniej nawet nie zauważyłem, że są jakieś szablony z OpenCV. Środowisko 32bitowe, na razie nie potrzebuję x64. Jeśli chodzi o dodatkowe biblioteki, to od razu dodałem do projektu OpenCV3, Box2D, CinderFluid i QuickTime. Tak na wszelki wypadek, bo nie wiem w którym kierunku to wszystko pójdzie. CinderFluid to biblioteka wspomagająca symulację płynów w 2D. Można ja dodać do katalogu blocks z repozytorium https://github.com/chaoticbob/CinderFx.git. Znalazłem ją wczoraj i może się przydać.
Po zakończeniu działania kreatora, wygenerowana została taka struktura katalogów:
W katalogu src znajduje się główne źródło aplikacji – CinderClimbApp.cpp
#include "cinder/app/App.h" #include "cinder/app/RendererGl.h" #include "cinder/gl/gl.h" using namespace ci; using namespace ci::app; using namespace std; class CinderClimbApp : public App { public: void setup() override; void mouseDown( MouseEvent event ) override; void update() override; void draw() override; }; void CinderClimbApp::setup() { } void CinderClimbApp::mouseDown( MouseEvent event ) { } void CinderClimbApp::update() { } void CinderClimbApp::draw() { gl::clear( Color( 0, 0, 0 ) ); } CINDER_APP( CinderClimbApp, RendererGl )
Na pewno więcej kodu w stosunku do Processing, ale jakoś tak przyjemniej. Od razu jest podział na update() i draw(). Choć generalnie logika pozostaje taka sama. Na początek będę to rozwijał w jednym pliku i później podzielę, jak wyklarują się wszystkie bloki aplikacji.
Teraz pozostaje przepisanie tego co już miałem w Processing.