<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Brainswitch Media</title>
	<atom:link href="http://www.brainswitch.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.brainswitch.org</link>
	<description></description>
	<lastBuildDate>Thu, 09 Feb 2012 22:42:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Motion stripes</title>
		<link>http://www.brainswitch.org/2012/02/motion-stripes/</link>
		<comments>http://www.brainswitch.org/2012/02/motion-stripes/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 22:40:24 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Cinder]]></category>

		<guid isPermaLink="false">http://www.brainswitch.org/?p=186</guid>
		<description><![CDATA[<img src="http://www.brainswitch.org/wp-content/uploads/2012/02/glsltripes.jpg" alt="" title="glsltripes" width="1100" height="450" class="alignnone size-full wp-image-187" />

Je commence un peu mieux à comprendre Cinder et les shaders. Voici donc le résultat de mes travaux du mois de janvier: textures procédurales audio-réactives, sphères, tubes et B-spline. ]]></description>
			<content:encoded><![CDATA[<p>Je commence à comprendre un peu mieux Cinder et les shaders. Voici le résultat de mes travaux du mois de janvier: textures procédurales audio-réactives, sphères, tubes et B-spline. Je suis épaté par les possibilités de ce framework. Si j&#8217;en ai le temps je vais essayer de faire un billet sur l&#8217;utilisation des B-splines parce que la facilité avec laquelle il est possible de créer des tubes en mouvement à l&#8217;aide du fameux parallel transport frame est tout simplement étonnante. Par contre je suis toujours incapable de sortir une vidéo de l&#8217;animation de bonne qualité.</p>
<p>Rendu final avec anti-aliasing et éclairage.</p>
<p><img src="http://www.brainswitch.org/wp-content/uploads/2012/02/glslstripes1.jpg" alt="" title="glslstripes1" width="850" height="600" class="alignnone size-full wp-image-189" /></p>
<p>&nbsp;<br />
Rendu final avec tubes et textures.</p>
<p><img src="http://www.brainswitch.org/wp-content/uploads/2012/02/glslstripest2.jpg" alt="" title="glslstripest2" width="850" height="600" class="alignnone size-full wp-image-190" /></p>
<p>&nbsp;<br />
Rendus final avec tubes et blending.</p>
<p><img src="http://www.brainswitch.org/wp-content/uploads/2012/02/glslstripes3.jpg" alt="" title="glslstripes3" width="850" height="600" class="alignnone size-full wp-image-192" /></p>
<p>&nbsp;<br />
Rendu final avec textures et blending.</p>
<p><img src="http://www.brainswitch.org/wp-content/uploads/2012/02/glslstripes4.jpg" alt="" title="glslstripes4" width="850" height="600" class="alignnone size-full wp-image-193" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brainswitch.org/2012/02/motion-stripes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Particules audio-réactives</title>
		<link>http://www.brainswitch.org/2012/01/particules-audio-reactives/</link>
		<comments>http://www.brainswitch.org/2012/01/particules-audio-reactives/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 17:47:49 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Cinder]]></category>

		<guid isPermaLink="false">http://www.brainswitch.org/?p=173</guid>
		<description><![CDATA[<img src="http://www.brainswitch.org/wp-content/uploads/2012/01/particles.jpg" alt="" title="particles" width="1100" height="450" class="alignnone size-full wp-image-179" />


J'ai enfin terminé ma première animation audio-réactive avec Cinder. Pour le moment, OpenGL étant encore quelque chose de nouveau pour moi, j'ai surtout passé du temps à comprendre la gestion des caméras, des billboards et des fonctions de blending de base.]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai enfin terminé ma première animation audio-réactive avec Cinder. Pour le moment, OpenGL étant encore quelque chose de nouveau pour moi, j&#8217;ai surtout passé du temps à comprendre la gestion des caméras, des billboards et des fonctions de blending de base. L&#8217;animation en elle même est donc assez simple, sans shaders et sans modèles 3D. 2 groupes de particules sont attirés par un point au centre de la scène, la taille des objets et l&#8217;attraction exercée par le point central varient en fonction du rythme de la musique.<br />
&nbsp;</p>
<p><img src="http://www.brainswitch.org/wp-content/uploads/2012/01/particles1.jpg" alt="" title="particles1" width="850" height="478" class="alignnone size-full wp-image-181" /></p>
<p>&nbsp;</p>
<p><img src="http://www.brainswitch.org/wp-content/uploads/2012/01/particles2.jpg" alt="" title="particles2" width="850" height="478" class="alignnone size-full wp-image-182" /></p>
<p>&nbsp;</p>
<p><img src="http://www.brainswitch.org/wp-content/uploads/2012/01/particles3.jpg" alt="" title="particles3" width="850" height="487" class="alignnone size-full wp-image-183" /></p>
<p>&nbsp;</p>
<p><iframe width="850" height="508" src="http://www.youtube.com/embed/xY-Cir92s8E?hd=1?hd=1" frameborder="0" allowfullscreen></iframe></p>
<p>Musique: Slam &#8211; Room 2 &#8211; Pan Pot Rave Tool Mix</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brainswitch.org/2012/01/particules-audio-reactives/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beat detection avec Cinder</title>
		<link>http://www.brainswitch.org/2011/11/beat-detection-avec-cinder/</link>
		<comments>http://www.brainswitch.org/2011/11/beat-detection-avec-cinder/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 17:28:40 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Cinder]]></category>

		<guid isPermaLink="false">http://www.brainswitch.org/?p=160</guid>
		<description><![CDATA[<img src="http://www.brainswitch.org/wp-content/uploads/2011/11/Beat-detection.jpg" alt="" title="Beat detection" width="1100" height="450" class="alignnone size-full wp-image-161" />

Suite de mon exploration du framework Cinder. Pour le développement d'animations audio-réactives, j'ai commencé à réaliser la partie portant sur l'acquisition du son et la détection du tempo.]]></description>
			<content:encoded><![CDATA[<p>Suite de mon exploration du framework Cinder. Pour le développement d&#8217;animations audio-réactives, j&#8217;ai commencé par réaliser la partie portant sur l&#8217;acquisition du son et la détection du tempo. De ce coté Cinder est vraiment bien foutu et les deux exemples fournis avec le framework permettent de comprendre rapidement l&#8217;utilisation de la classe audio et ses fonctions de traitement du son comme la discrétisation du signal. J&#8217;ai remarqué un seul petit problème avec la classe audio, qui n&#8217;est pour le moment apparemment toujours pas résolu. Avec certaines cartes son il semble qu&#8217;il y ait de temps en temps des plantages au démarrage, en tout cas sur mon mac book ça arrive. Mais étant donné que ce n&#8217;est qu&#8217;au lancement de l&#8217;application que ça se produit ce n&#8217;est pas franchement rédhibitoire. Par contre pour une installation multimédia permanente avec redémarrage et extinction automatique du programme ça peut néanmoins être ennuyeux.</p>
<p>En ce qui concerne l&#8217;algorithme de détection du tempo, je me suis basé sur une source Flash très efficace: <a href="http://www.julapy.com/blog/2007/12/30/beat-detection-in-flash/">beat detection in flash</a>. Le principe est le suivant: on calcule l&#8217;énergie instantanée par frame en faisant la moyenne des énergies sur une certaine plage de fréquences et on compare la valeur avec la moyenne des dernières valeurs stockées dans une mémoire tampon. Si l&#8217;énergie instantanée est supérieure à la moyenne du tampon, on détecte un beat. A lire également, <a href="http://pierre.fritsch.free.fr/supelec/bpm/rapport_bpm.pdf" target="blank">cet article</a> très intéressant sur la détection du tempo.</p>
<p>&nbsp;</p>
<p><iframe src="http://player.vimeo.com/video/32196966?title=0&amp;byline=0&amp;portrait=0" width="850" height="563" frameborder="0" webkitAllowFullScreen allowFullScreen></iframe></p>
<p>Musique: Tractile &#8211; Silent Movie</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brainswitch.org/2011/11/beat-detection-avec-cinder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Décomposition RGB avec Pixel Bender</title>
		<link>http://www.brainswitch.org/2011/10/decomposition-rgb-avec-pixel-bender/</link>
		<comments>http://www.brainswitch.org/2011/10/decomposition-rgb-avec-pixel-bender/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 23:00:11 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Code source]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Pixel-bender]]></category>

		<guid isPermaLink="false">http://www.brainswitch.org/?p=141</guid>
		<description><![CDATA[<img src="http://www.brainswitch.org/wp-content/uploads/2011/10/rgb1.jpg" alt="" title="rgb1" width="1100" height="450" class="alignnone size-full wp-image-143" />

Il est possible très simplement avec Pixel Bender de décomposer une image RGB en ses 3 composantes rouge, verte et bleue. Il est tout aussi facile de les manipuler et de les filtrer pour obtenir divers effets applicables à un flux vidéo provenant d'une webcam par exemple, comme dans cette animation.]]></description>
			<content:encoded><![CDATA[<p><object id="animFlash" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="1100" height="453" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="bgcolor" value="#000000" /><param name="allowScriptAccess" value="sameDomain" /><param name="quality" value="high" /><param name="src" value="http://brainswitch.org/swf/camrgb.swf" /><param name="name" value="animFlash" /><param name="allowFullScreen" value="true" /><embed id="animFlash" type="application/x-shockwave-flash" width="1100" height="453" src="http://brainswitch.org/swf/camrgb.swf" name="animFlash" quality="high" allowscriptaccess="sameDomain" allowFullScreen="true" bgcolor="#000000"></embed></object></p>
<p>Il est possible très simplement avec Pixel Bender de décomposer une image RGB en ses 3 composantes rouge, verte et bleue. Il est tout aussi facile de les manipuler et de les filtrer pour obtenir divers effets applicables à un flux vidéo provenant d&#8217;une webcam par exemple, comme dans cette animation.<br />
&nbsp;</p>
<p><strong>Pixélisation d&#8217;une image avec Pixel Bender</strong></p>
<p>Pour pixéliser une image à l&#8217;aide de Pixel Bender, chaque pixel de l&#8217;image source va être représenté par un carré de coté c sur l&#8217;image de sortie (l&#8217;image de sortie sera donc c fois plus grande que l&#8217;image source). Dans l&#8217;image de sortie chaque carré prendra la couleur d&#8217;un seul pixel de l&#8217;image source. Il faut donc récupérer, pour chaque carré, c fois la couleur de chaque pixel de l&#8217;image source en largeur et c fois la couleurs de chaque pixel de l&#8217;image source en hauteur. On détermine donc la couleur de chaque pixel de coordonnées (x,y) de l&#8217;image de sortie en récupérant la partie entière de la division de x et y par la dimension c du carré.</p>
<p>Ainsi, pour les coordonnées x et y de l&#8217;image de sortie allant de 0 à c-1, les parties entières ex et ey des divisions x/c et y/c sont égales à 0. Pour les coordonnées x et y de l&#8217;image de sortie allant de c à 2c-1, les parties entières ex et ey des divisions x/c et y/c sont égales à 1 et ainsi de suite. Il suffit de lire la couleur du pixel de coordonnées (ex,ey) de l&#8217;image source pour déterminer la couleur de chaque carré correspondant de l&#8217;image de sortie.</p>
<pre class="brush: cpp; title: ; notranslate">
&lt;languageVersion : 1.0;&gt;

kernel SquareDecomposition
&lt;   namespace : &quot;brainswitch&quot;;
    vendor : &quot;Brainswitch&quot;;
    version : 1;
&gt;

{
    input image4 src;
    output pixel4 dst;

    void evaluatePixel()
    {
        const float squareWidth = 10.0;

        float outX = outCoord().x;
        float outY = outCoord().y;

        float positionX = floor( outX/squareWidth );
        float positionY = floor( outY/squareWidth );

        float3 offset = float3( positionX, positionY, 0.0 );
        float4 outColor = sampleNearest( src, offset.xy );

        dst.r = outColor.r;
        dst.g = outColor.g;
        dst.b = outColor.b;
        dst.a = 1.0;
    }
}
</pre>
<p>L&#8217;image suivante a été obtenue à partir de ce shader.</p>
<p><img src="http://www.brainswitch.org/wp-content/uploads/2011/10/firefox1.jpg" alt="" title="firefox1" width="1100" height="560" class="alignnone size-full wp-image-144" /><br />
&nbsp;<br />
<strong>Pixélisation et décomposition RGB d&#8217;une image avec Pixel Bender</strong></p>
<p>Dans chaque carré de l&#8217;image de sortie on peut maintenant décomposer la couleur du pixel d&#8217;entrée correspondant en bandes rouge, verte et bleue. Si on veut dessiner dans chaque carré, 3 bandes de largeur b et de longueur c, on aura c = 3b. On peut également séparer les carrés par un espace d&#8217;un pixel, dans ce cas c vaudra 3b+1.</p>
<p>En largeur, la couleur de chaque pixel de la première bande, sera égale à la composante rouge du pixel correspondant de l&#8217;image source, idem pour les deuxième et troisième bandes avec les composantes verte et bleue. On aura donc en x, sur l&#8217;image de sortie, une trait rouge, une trait vert, une trait bleu, puis un point noir puis de nouveau une trait rouge et ainsi de suite. On va se servir de la fonction mod (modulo) de Pixel Bender pour réaliser cette décomposition. Si l&#8217;on choisit b=3, c sera égal à 3*3+1 soit 10, et on aura pour x (la coordonnée x du pixel de l&#8217;image de sortie) variant de 0 à 19:</p>
<p>0 mod 10 = 0, 1 mod 10 = 1, 2 mod 10 = 2, pour le rouge<br />
3 mod 10 = 3, 4 mod 10 = 4, 5 mod 10 = 5, pour le vert<br />
6 mod 10 = 6, 7 mod 10 = 7, 8 mod 10 = 8, pour le bleu<br />
9 mod 10 = 9, pour le noir<br />
10 mod 10 = 0, 11 mod 10 = 1, 12 mod 10 = 2, pour le rouge<br />
13 mod 10 = 3, 14 mod 10 = 4, 15 mod 10 = 5, pour le vert<br />
16 mod 10 = 6, 17 mod 10 = 7, 18 mod 10 = 8, pour le bleu<br />
19 mod 10 = 9, pour le noir</p>
<p>Ainsi, pour les coordonnées x de chaque pixel de l’image de sortie, x mod 10 retournera toujours des valeurs de 0 à 9 nous permettant de déterminer sa couleur. En hauteur (coordonnées y de chaque pixel de l’image de sortie), le principe est le même mais on se soucie uniquement de la valeur 9 pour tracer un trait noir de séparation entre les carrées.</p>
<pre class="brush: cpp; title: ; notranslate">
&lt;languageVersion : 1.0;&gt;

kernel RVBSquareDecomposition
&lt;   namespace : &quot;brainswitch&quot;;
    vendor : &quot;Brainswitch&quot;;
    version : 1;
&gt;

{
    input image4 src;
    output pixel4 dst;

    void evaluatePixel()
    {
        const float squareWidth = 10.0;

        float outX = outCoord().x;
        float outY = outCoord().y;

        float positionX = floor( outX/squareWidth );
        float positionY = floor( outY/squareWidth );

        float3 offset = float3( positionX, positionY, 0.0 );
        float4 outColor = sampleNearest( src, offset.xy );

        float stepX = mod( floor( outX/1.0 ), squareWidth );
        float stepY = mod( floor( outY/1.0 ), squareWidth );

        if ( stepX == 0.0 || stepX == 1.0 || stepX == 2.0 ) {
            dst.r = outColor.r;
            dst.g = 0.0;
            dst.b = 0.0;
        } else if ( stepX == 3.0 || stepX == 4.0 || stepX == 5.0 ) {
            dst.r = 0.0;
            dst.g = outColor.g;
            dst.b = 0.0;
        } else if ( stepX == 6.0  || stepX == 7.0 || stepX == 8.0 ) {
            dst.r = 0.0;
            dst.g = 0.0;
            dst.b = outColor.b;
        } else if ( stepX == 9.0 ) {
            dst.r = 0.0;
            dst.g = 0.0;
            dst.b = 0.0;
        }

        if ( stepY  == 9.0 ) {
            dst.r = 0.0;
            dst.g = 0.0;
            dst.b = 0.0;
        }

        dst.a = 1.0;
    }
}
</pre>
<p>L&#8217;image suivante a été obtenue à partir de ce shader.</p>
<p><img src="http://www.brainswitch.org/wp-content/uploads/2011/10/firefox2.jpg" alt="" title="firefox2" width="1100" height="562" class="alignnone size-full wp-image-145" /><br />
&nbsp;</p>
<p><strong>Exécution du shader à l&#8217;aide d&#8217;un objet ShaderJob</strong></p>
<p>Un objet <a href="http://help.adobe.com/fr_FR/FlashPlatform/reference/actionscript/3/flash/display/ShaderJob.html?filter_flex=4.1&#038;filter_flashplayer=10.2&#038;filter_air=2.6">ShaderJob</a> permet d’exécuter un shader en mode autonome de manière synchrone ou asynchrone. Le morceau de code suivant charge une image et le shader RVBSquareDecomposition.pbj, crée et éxécute un ShaderJob avec la fonction imgToRGBSquare puis affiche le résultat à l&#8217;écran. </p>
<pre class="brush: as3; title: ; notranslate">
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Shader;
import flash.display.ShaderJob;

// classes issues du framework Flex: indispensables pour utiliser l'embed dans Flash
import mx.core.*;

[Embed ( source=&quot;assets/image.jpg&quot; )]
var InputImg:Class;

[Embed ( source=&quot;assets/RVBSquareDecomposition.pbj&quot;, mimeType = &quot;application/octet-stream&quot; )]
var RgbSquare:Class;

var inputImg:Bitmap					= new InputImg();
var inputBitmapData:BitmapData		= inputImg.bitmapData;
var outputBitmapData:BitmapData		= new BitmapData( 1100, 650, false, 0x000000 );
var squaresBitmapData:BitmapData	= new BitmapData( 1100, 650, false, 0x000000 );

var screenBitmap:Bitmap = new Bitmap ( outputBitmapData );
addChild( screenBitmap );

squaresBitmapData = imgToRGBSquare( inputBitmapData, 10, true );
outputBitmapData.copyPixels( squaresBitmapData, new Rectangle( 0, 0, 1100, 650 ), new Point( 0, 0 ) );

function imgToRGBSquare( input:BitmapData, squareSize:int, cleanup:Boolean = true ):BitmapData
{
	// Création et configuration d'un ShadeJob
	var shader:Shader = new Shader();
	shader.byteCode = new RgbSquare(); // Instanciation d'un objet byteCode
	shader.data.src.input = input; // L'image source envoyée au shader 

	var outputWidth:int = input.width;
	var outputHeight:int = input.height;

	// Création d'une Bitmap pour récupérer les données de sortie du shader
	var output:BitmapData = new BitmapData( outputWidth * squareSize, outputHeight * squareSize );

	// Création du shaderJob
	var job:ShaderJob = new ShaderJob();
	job.target = output; // ShaderJob utilise l'objet output comme sortie
	job.shader = shader; // Le shader assigné au ShaderJob
	job.start( true ); // Exécution synchrone, false pour une éxécution asynchrone

	return output;
}
</pre>
<p>Il est possible de faire évoluer ce shader en ajoutant des conditions ou en effectuant un ajustement de couleurs pour obtenir des images totalement différentes. Il est également possible de convertir les pixels en traits ou en toute autre formes plutôt qu&#8217;en carrés. Les images ci-dessous sont issue de l&#8217;animation du haut de la page, les composantes RGB des pixels de l&#8217;image source sont filtrées en fonction de leur intensité.<br />
&nbsp;<br />
<img src="http://www.brainswitch.org/wp-content/uploads/2011/10/rgb4.jpg" alt="" title="rgb4" width="1100" height="450" class="alignnone size-full wp-image-146" /><br />
&nbsp;</p>
<p><img src="http://www.brainswitch.org/wp-content/uploads/2011/10/rgb2.jpg" alt="" title="rgb2" width="1100" height="450" class="alignnone size-full wp-image-147" /><br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brainswitch.org/2011/10/decomposition-rgb-avec-pixel-bender/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Différence centrale avec Cinder</title>
		<link>http://www.brainswitch.org/2011/09/difference-centrale-avec-cinder/</link>
		<comments>http://www.brainswitch.org/2011/09/difference-centrale-avec-cinder/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 21:40:20 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Cinder]]></category>

		<guid isPermaLink="false">http://www.brainswitch.org/?p=126</guid>
		<description><![CDATA[<img src="http://www.brainswitch.org/wp-content/uploads/2011/09/centraldiff.jpg" alt="" title="centraldiff" width="1100" height="450" class="alignnone size-full wp-image-137" />

Cela faisait un certain temps que je voulais travailler avec un langage plus performant que l'AS3. Je connaissais déjà Processing que j'ai un peu testé mais ayant déjà programmé par le passé en C++, je me suis laissé tenter par <a href="http://libcinder.org/">Cinder</a>.]]></description>
			<content:encoded><![CDATA[<p>Cela faisait un certain temps que je voulais travailler avec un langage plus performant que l&#8217;AS3. Je connaissais déjà Processing que j&#8217;ai un peu testé mais ayant déjà programmé par le passé en C++, je me suis laissé tenter par <a href="http://libcinder.org/">Cinder</a>. En fait j&#8217;ai hésité entre <a href="http://www.openframeworks.cc/">openFrameworks</a> et Cinder. Le choix n&#8217;a pas été facile, d&#8217;un coté openFrameworks doté d&#8217;une communauté importante et qui est,  parait-il, plus abordable, d&#8217;un autre coté Cinder beaucoup plus récent et moins bien documenté mais contenant une bonne quantité d&#8217;exemples permettant de se faire rapidement une idée des possibilités. Même si un énorme travail a été réalisé pour rendre la prise en main facile, ça reste du C++, c&#8217;est donc une approche totalement différente de l&#8217;AS3 et pour aller plus loin et développer ses propres programmes il faut quand même s&#8217;y mettre sérieusement si on a pas l&#8217;habitude de ce langage. Je ne suis qu&#8217;au début, mais quand je vois la puissance de Cinder et OpenGL, je ne regrette pas d&#8217;avoir passé du temps à me remettre au C++ et j&#8217;encourage tous ceux qui voudraient se lancer dans un langage de haut niveau à essayer Cinder.</p>
<p>Pour commencer, avant d&#8217;aborder vraiment la 3D avec OpenGL, j&#8217;ai adapté l&#8217;algorithme de différence centrale de <a href="http://unitzeroone.com/blog/">Ralph Hauwert</a> que j&#8217;avais déjà testé avec une webcam en Flash. Je suis passé d&#8217;une animation de 50000 particules en 700&#215;465 à 650000 particules en fullscreen hd à 60 fps. Soit une différence de performance énorme, et je pourrais encore augmenter le nombre de particules. Le programme est en réalité quasiment intégralement réalisé à l&#8217;aide de shaders et de <a href="http://www.ozone3d.net/tutorials/vertex_displacement_mapping.php">vertex shaders</a>.</p>
<p>A l&#8217;avenir j&#8217;essaierai de publier des sources en fonction de mes progrès mais si vous désirez vous mettre au C++ pour réaliser ce genre d&#8217;animation je vous conseille de lire cette <a href="http://forum.libcinder.org/#topic/23286000000153013">discussion</a> sur le forum de Cinder.<br />
&nbsp;</p>
<p>Quelques captures d&#8217;écran:</p>
<p><img src="http://www.brainswitch.org/wp-content/uploads/2011/09/gpucd1p.jpg" alt="" title="gpucd1p" width="850" height="478" class="alignnone size-full wp-image-127" /></p>
<p>&nbsp;</p>
<p><img src="http://www.brainswitch.org/wp-content/uploads/2011/09/gpucd3p.jpg" alt="" title="gpucd3p" width="850" height="478" class="alignnone size-full wp-image-128" /></p>
<p>&nbsp;<br />
J&#8217;ai essayé également de réaliser une vidéo, mais la qualité n&#8217;est pas terrible, en HD c&#8217;est un peu mieux mais ça reste légèrement flou.</p>
<p><iframe width="850" height="508" src="http://www.youtube.com/embed/QoZDBuqO2Zg?hd=1" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brainswitch.org/2011/09/difference-centrale-avec-cinder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>55000 particules avec ma webcam</title>
		<link>http://www.brainswitch.org/2011/07/55000-particules-avec-ma-webcam/</link>
		<comments>http://www.brainswitch.org/2011/07/55000-particules-avec-ma-webcam/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 22:34:18 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.brainswitch.org/?p=118</guid>
		<description><![CDATA[<img src="http://www.brainswitch.org/wp-content/uploads/2011/07/cam.jpg" alt="" title="cam" width="1100" height="450" class="alignnone size-full wp-image-119" />

Ralph Hauwert a posté sur son <a href="http://unitzeroone.com/blog/2011/01/16/the-particle-sessions-part-one-is-this-it/">blog</a> un tutoriel exceptionnel sur l'animation de particules en as3. Plusieurs sujets y sont traités en détail et illustrés par des exemples concrets: bruit de Perlin, pixel shader, optimisation du code.. un must!]]></description>
			<content:encoded><![CDATA[<p><object id="animFlash" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="1100" height="866" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="bgcolor" value="#000000" /><param name="allowScriptAccess" value="sameDomain" /><param name="quality" value="high" /><param name="src" value="http://brainswitch.org/swf/webcamparticles/particles.swf" /><param name="name" value="animFlash" /><embed id="animFlash" type="application/x-shockwave-flash" width="1100" height="866" src="http://brainswitch.org/swf/webcamparticles/particles.swf" name="animFlash" quality="high" allowscriptaccess="sameDomain" bgcolor="#000000"></embed></object></p>
<p>Ralph Hauwert a posté sur son <a href="http://unitzeroone.com/blog/2011/01/16/the-particle-sessions-part-one-is-this-it/">blog</a> un tutoriel exceptionnel sur l&#8217;animation de particules en as3. Plusieurs sujets y sont traités en détail et illustrés par des exemples concrets: bruit de Perlin, pixel shader, optimisation du code.. un must! Il fallait que je teste avec une webcam pour voir ce que ça donne, résultat: 55000 particules à 60fps sans le moindre ralentissement sur un AMD Athlon Dual-Core de 2 ans..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brainswitch.org/2011/07/55000-particules-avec-ma-webcam/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>3D ribbons avec Away3D</title>
		<link>http://www.brainswitch.org/2011/06/3d-trails-avec-away3d/</link>
		<comments>http://www.brainswitch.org/2011/06/3d-trails-avec-away3d/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 21:38:14 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Code source]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.brainswitch.org/?p=100</guid>
		<description><![CDATA[<img src="http://www.brainswitch.org/wp-content/uploads/2011/06/trails.jpg" alt="" title="trails" width="1100" height="450" class="alignnone size-full wp-image-116" />

Le mois dernier j'ai commencé à travailler sur les ribbons ou rubans. Après avoir fait quelques essais en 2D j'ai réalisé une classe pour away3D que j'ai utilisée dans cette animation.]]></description>
			<content:encoded><![CDATA[<p><object id="animFlash" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="1100" height="700" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="bgcolor" value="#2b3843" /><param name="allowScriptAccess" value="sameDomain" /><param name="quality" value="high" /><param name="src" value="http://www.brainswitch.org/swf/ribbons3d.swf" /><param name="name" value="animFlash" /><param name="allowFullScreen" value="true" /><embed id="animFlash" type="application/x-shockwave-flash" width="1100" height="700" src="http://www.brainswitch.org/swf/ribbons3d.swf" name="animFlash" quality="high" allowscriptaccess="sameDomain" allowFullScreen="true" bgcolor="#2b3843"></embed></object></p>
<p><strong>Cliquez sur l&#8217;animation pour passer en mode plein écran.</strong></p>
<p>Le mois dernier j&#8217;ai commencé à travailler sur les ribbons ou rubans. Après avoir fait quelques essais en 2D j&#8217;ai réalisé une classe pour away3D que j&#8217;ai utilisée dans cette animation. Avec cette classe il est possible d&#8217;ajouter une forme au ruban. C&#8217;est un paramètre optionnel que j&#8217;ai appelé profile. A l&#8217;aide d&#8217;un profile vous pouvez créer des rubans effilés ou pointus par exemple, si vous ne définissez pas de profile le ruban sera rectiligne. Vous trouverez des explications plus détaillées à ce sujet dans le fichier exemple fournis avec la classe téléchargeable <a href="http://www.brainswitch.org/src/ribbons3D.zip">ici</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.brainswitch.org/2011/06/3d-trails-avec-away3d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kiss my rocket</title>
		<link>http://www.brainswitch.org/2011/06/kiss-my-rocket/</link>
		<comments>http://www.brainswitch.org/2011/06/kiss-my-rocket/#comments</comments>
		<pubDate>Sun, 26 Jun 2011 23:29:50 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Divers]]></category>

		<guid isPermaLink="false">http://www.brainswitch.org/?p=91</guid>
		<description><![CDATA[<img src="http://www.brainswitch.org/wp-content/uploads/2011/06/kissmyrocket.jpg" alt="" title="kissmyrocket" width="1100" height="450" class="alignnone size-full wp-image-94" />

Pour changer, parce qu'il n'y a pas que Flash dans la vie, j'ai eu envie de poster un petit billet sur Kiss my rocket, un MMO pour Iphone et Ipad sympa et très réussi, qui plus est, téléchargeable gratuitement.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.brainswitch.org/wp-content/uploads/2011/06/kissmyrocket.jpg" alt="" title="kissmyrocket" width="1100" height="450" class="alignnone size-full wp-image-94" /></p>
<p>Kiss my Rocket est un MMO pour Ipad et Iphone édité par la société <a href="http://www.korrisoft.com/kiss-my-rocket/kiss-my-rocket.htm">Korrisoft</a>. Dans ce jeu, a priori assez classique, vous devez détecter la position des autres joueurs à l&#8217;aide de radars et les détruire en leur balançant des missiles. Si je parle de ce jeu c&#8217;est parce que l&#8217;équipe de Korrisoft a eu l&#8217;idée originale d&#8217;exploiter la géolocalisation des joueurs. Le jeu utilise en fait votre position dans le monde réel, votre base dans le jeu est donc située la ou vous vous trouvez et les missiles que vous tirerez mettront le temps qu&#8217;ils prendraient dans la réalité pour atteindre leur objectif. Au départ vous ne disposez que d&#8217;un armement limité mais il vous sera possible par la suite d&#8217;acheter de nouveaux missiles et de renforcer la protection de votre base à l&#8217;aide d&#8217;une monnaie virtuelle.</p>
<p>Et comme dans ce genre de jeu ce qui est le plus marrant c&#8217;est de pouvoir jouer avec ses potes, Korrisoft le distribue gratuitement. Quand on voit le nombre d&#8217;applis payantes qui ne servent à rien, c&#8217;est quand même agréable de pouvoir télécharger gratuitement un jeu original, en plus vous pourrez facilement inviter vos connaissances avec un système de parrainage.</p>
<p>Pour voir le trailer de lancement de Kiss my rocket, c&#8217;est <a href="http://www.youtube.com/watch?v=xbg5Mq-jWRQ&#038;feature=player_embedded">ici</a> et pour télécharger le jeu c&#8217;est <a href="http://itunes.apple.com/us/app/kiss-my-rocket/id428244728?mt=8&#038;ls=1">la</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brainswitch.org/2011/06/kiss-my-rocket/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sphère et texture animée avec Away3D</title>
		<link>http://www.brainswitch.org/2011/06/sphere-et-texture-animee-avec-away3d/</link>
		<comments>http://www.brainswitch.org/2011/06/sphere-et-texture-animee-avec-away3d/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 16:05:12 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.brainswitch.org/?p=83</guid>
		<description><![CDATA[<img src="http://www.brainswitch.org/wp-content/uploads/2011/06/metaballs.jpg" alt="" title="metaballs" width="1100" height="450" class="alignnone size-full wp-image-84" />

Nouvelle expérimentation avec Away3D et les MovieMaterials. La texture animée appliquée sur une sphère en rotation a été réalisée à partir de metaballs. Vous trouverez <a href="http://processing.org/learning/topics/metaball.html">ici</a> un exemple de code permettant de réaliser des metaballs en 2D avec Processing.]]></description>
			<content:encoded><![CDATA[<p><object id="animFlash" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="1100" height="750" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="bgcolor" value="#333333" /><param name="allowScriptAccess" value="sameDomain" /><param name="quality" value="high" /><param name="src" value="http://www.brainswitch.org/swf/spheremetaballs/sphere.swf" /><param name="name" value="animFlash" /><embed id="animFlash" type="application/x-shockwave-flash" width="1100" height="750" src="http://www.brainswitch.org/swf/spheremetaballs/sphere.swf" name="animFlash" quality="high" allowscriptaccess="sameDomain" bgcolor="#333333"></embed></object></p>
<p>Nouvelle expérimentation avec Away3D et les MovieMaterials. La texture animée appliquée sur une sphère en rotation a été réalisée à partir de metaballs. Vous trouverez <a href="http://processing.org/learning/topics/metaball.html">ici</a> un exemple de code permettant de réaliser des metaballs en 2D avec Processing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brainswitch.org/2011/06/sphere-et-texture-animee-avec-away3d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Particules</title>
		<link>http://www.brainswitch.org/2011/06/particules/</link>
		<comments>http://www.brainswitch.org/2011/06/particules/#comments</comments>
		<pubDate>Wed, 15 Jun 2011 18:34:56 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.brainswitch.org/?p=72</guid>
		<description><![CDATA[<img src="http://www.brainswitch.org/wp-content/uploads/2011/06/trails1.jpg" alt="" title="trails1" width="1100" height="450" class="alignnone size-full wp-image-81" />

Petites créatures aquatiques ondulant dans le courant. Cherchant toujours de se regrouper, elles se repoussent l'une l'autre lorsqu'elles sont trop proches. il s'agit pour le moment d'une animation en 2D basée sur les ribbons et les particules mais je travaille sur une adaptation pour away3D que je posterai prochainement.]]></description>
			<content:encoded><![CDATA[<p><object id="animFlash" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="1100" height="800" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="bgcolor" value="#333333" /><param name="allowScriptAccess" value="sameDomain" /><param name="quality" value="high" /><param name="src" value="http://www.brainswitch.org/swf/trails1.swf" /><param name="name" value="animFlash" /><embed id="animFlash" type="application/x-shockwave-flash" width="1100" height="800" src="http://www.brainswitch.org/swf/trails1.swf" name="animFlash" quality="high" allowscriptaccess="sameDomain" bgcolor="#333333"></embed></object></p>
<p>Petites créatures aquatiques ondulant dans le courant. Cherchant toujours de se regrouper, elles se repoussent l&#8217;une l&#8217;autre lorsqu&#8217;elles sont trop proches. il s&#8217;agit pour le moment d&#8217;une animation en 2D basée sur les ribbons et les particules mais je travaille sur une adaptation pour away3D que je posterai prochainement.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brainswitch.org/2011/06/particules/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

