---
title: "Cinder"
description: "A look at the Cinder creative-coding library, which gave the climbing-wall project its name (in Polish)."
date: 2016-03-24T11:51:45Z
lastmod: 2026-10-01T15:46:16+02:00
url: https://klimek.link/cinder/
author: "Marcin Klimek"
source: https://klimek.link/cinder/
---

# Cinder

<a href="https://libcinder.org/" target="_blank">Cinder</a> 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&#8217;a.



Obecnie duży wkład w rozwój ma firma <a href="http://www.barbariangroup.com/" target="_blank">Barbarian Group</a>.  

<h3 style="padding-left: 30px;">
  Drobne wtrącenie nie związane z projektem
</h3>

<p style="padding-left: 30px;">
  Od długiego czasu używam ciekawego rozszerzenia konsoli pod Windows. Nazywa się <a href="http://cmder.net/" target="_blank">Cmder</a>. Jest niezwykle przydatnym i wygodnym rozwiązaniem. To namiastka terminala linuxowego dodatkowo, dzieki cechom <a href="https://conemu.github.io/" target="_blank">ConEmu</a> dostarczająca rozwiązań a&#8217;la <a href="http://gnometerminator.blogspot.com/p/introduction.html" target="_blank">Terminator</a>(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.
</p>

## Instalacja <a href="https://libcinder.org/" target="_blank">Cinder</a>

Zdecydowałem się na wersję z github&#8217;a. Klonuję repozytorium

<pre class="EnlighterJSRAW" data-enlighter-language="shell">git clone --recursive https://github.com/cinder/Cinder.git</pre>

Do tego w podkatalogu instaluję moduł OpenCV. Wersję z rodziny 3.x.

&nbsp;

&nbsp;

<pre class="EnlighterJSRAW" data-enlighter-language="shell">cd blocks
git clone  --depth 1 https://github.com/cinder/Cinder-OpenCV3.git # tak zwana płytka kopia, wystarczy mi ostatnia rewizja</pre>

Pod Visual Studio 2013 ładuję _solution_ &#8211; _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. <a href="https://github.com/chaoticbob/CinderFx.git" target="_blank">CinderFluid</a> to biblioteka wspomagająca symulację płynów w 2D. Można ja dodać do katalogu <span style="font-weight: bold; font-style: italic;">blocks</span> z repozytorium <https://github.com/chaoticbob/CinderFx.git>. Znalazłem ją wczoraj i może się przydać.

&nbsp;

 

Po zakończeniu działania kreatora, wygenerowana została taka struktura katalogów:

 

W katalogu _src_ znajduje się główne źródło aplikacji &#8211; _CinderClimbApp.cpp_

<pre class="EnlighterJSRAW" data-enlighter-language="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 )
</pre>

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.

Source: https://klimek.link/cinder/
