SegmA — 2010-02-18 23:23:22

Bonsoir à tous!
Je suis nouveau dans le monde des tables réactives; et très intéressé par tout ce beau matos, je m'étais juré de m'en réaliser une! C'est pourquoi depuis lundi dernier j'ai débuté mon projet.

Voici ce dont je me sers actuellement:

-Plaque de verre 3mm d'épaisseur (avec 4 feuilles blanches Canson 21*29.7cm - cheap ! :p )
-PC sous Windows 7 x64 - Ubuntu.
-PS3eye.
-ReacTIVision 1.4.
-Reason 4/Fruityloops 9.

Voila ce que ça donne côté photo:

http://img15.imageshack.us/img15/2199/16022010031.jpg

Une petite vidéo réalisée hier après-midi (soit au bout de seulement 3 jours de création, alors soyez indulgent svp! lol):





lien vers la page de la vidéo sur youtube



Ma table marche plutôt bien; pour l'instant en midi donc, sous FL9 et Reason 4 aucun problèmes notables.

Je souhaitais m'attaquer au feedback vidéo; mais me rendant compte qu'un vidéo-projecteur n'était pas dans mes moyens pour le moment, une question m'est venue.
Vu que le retour se fait avec une source lumineuse (logique je sais!); pourrais-je, à votre avis, utiliser un moniteur LCD (que j'ai en rab'); le fixer sous ma plaque de verre, et avoir un rendu <<passable>>?!
Mon idée n'est peut-être pas nouvelle, mais je voudrais savoir si quelqu'un l'a déjà réalisée, et si c'est à recommander ou non!
Si cela s'avêrait positif, peut-être serait-il bénéfique de supprimer le cadre du moniteur, avec de gagner quelques précieux millimètres...
Bref, c'est un projet qui me tient à coeur, j'en apprends beaucoup ici et là, et je trouve que l'idée de réunir les créateurs de réactable DIY une excellente idée!

Merci à ceux qui prendront la peine de me répondre ;)

emoc — 2010-02-19 14:35:34

Bonjour SegmA et bienvenue!

Dunya, la table de Bitcrusher, fonctionne avec un moniteur. Il avait donné le lien vers tous les fichiers, photos, etc. dans la première discussion sur les tables réactives (http://codelab.fr/48-3#p3827 ), le revoilà : http://bitcrusher.free.fr/dunya/
Il pourra probablement t'en dire plus quand il repassera par ici. Le gros avantage que je vois, c'est qu'il est possible d'obtenir vite des résultats, et de travailler sur le retour visuel sans se confronter à trop de construction et de casse-têtes : miroir(s), infrarouge, etc...

Bonne continuation à ton projet!

SegmA — 2010-02-19 18:53:27

Tout d'abord, merci de ta réponse très rapide; et de l'accueil !
Merci également pour les liens/conseils, je vais de ce pas m'y coller !

Le lcd sera fixé d'ici lundi, et je vais essayer de basculer vers ubuntu; pour l'instant j'ai du mal à compiler les sources de reactivision 1.4 sur la Karmic Koala; est-ce que quelqu'un à le même problème?!.

Je vous ferais part de mes différentes avancées dans un futur proche !
Tchao les amis !

SegmA — 2010-02-22 19:39:47

Me revoici!
J'apporte des nouvelles de mon projet!
Bon alors concernant le feedback vidéo, tant que j'ai pas de vidéoprojecteur, je le laisse de côté!
Le lcd étant relativement petit, ça me limiterait trop; je préfère attendre pour plus de sérieux.

Alors voilà les changements, et ils sont de taille!
Je ne suis pas un pro de KNEX, mais j'en fais usage car c'est simple pour moi de créer un support!
Je trouvais que mon ancien système était un peu précaire (2 chaises , une planche disposée verticalement + des KNEX relativement peu stables)
Donc on reste dans le précaire, mais un peu moins =P :

http://img687.imageshack.us/img687/1321/22022010040.jpg

Au sujet de la webcam je voulais savoir si quelqu'un sait quelle est la meilleure fréquence d'utilisation?!
Je suis sous du 15fps, ça marche plutôt sans aucun soucis, mais je me dis que plus c'est haut mieux ça doit interpréter les fiducials (au risque de bouffer plus de ressources).

teofil — 2010-02-22 20:34:28

C'est ça. Plus la définition est élevée, et plus le nombre de frames par seconde (fps) est élevé, et meilleur sera la détection des fiducials, tant en réactivité (la vitesse à laquelle tu les bouges), qu'en taille (plus ils sont petits, plus il sera difficile pour reactivision de les reconnaître).

Vu ta configuration (windows 7+PS3 eye), tu dois pouvoir monter à 30 voir 60fps en 640x480 avec les drivers d'AlexP, ce qui est largement suffisant vu la taille de ta surface.

Bien sûr, plus ces valeurs sont fortes, pus ça te bouffe de la ressource, mais c'est pas non plus gigantesque.

Sympa la structure en Knex :D

Vu ta configuration hardware ("Front DI" avec éclairage et prise de vue par le dessus), la feuille canson sous le verre ne sert pas à grand chose.

Pour ce qui est du feedback vidéo via un écran lcd, je ne vois moi aussi que le projet Dunya qui fait ça (Bitcrusher est très sympa =)  )

Il y a en revanche une autre solution que de simplement mettre un écran sous ta plaque. C'est une manip risquée, mais si c'est bien fait, le résultat peut être au rendez-vous. Ça consiste en fait à démonter entièrement un écran LCD (genre d'ordi) et de séparer la dalle LCD (une plaque fine, fragile et transparente avec tous les pixels) de la dalle lumineuse (celle qui éclaire les pixels pour en voir la couleur), et de la carte mère de l'écran avec les connectiques et tout. Une fois ta dalle LCD mise entre 2 plaques de verre pour la protéger, tu pourra filmer par en dessous et ainsi avoir une table plus "classique". Bien entendu, cela engendre le passage de la caméra dans le spectre infrarouge pour ne pas être perturbé par ce qu'affiche l'écran, et tout l'éclairage qui va avec.
Ça a l'air ambitieux, mais ça revient pas si cher que ça.

Trêve de bavardage, voilà quelques exemples de projets de ce type chez le Nui group :
Une table faite à partir d'un écran 17", le thread est bien garni en photos et vidéos.
Ici le démontage complet d'un écran et son conditionnement pour une table, tout en photos.

Cette manip ne fonctionne pas avec tous les écrans, cela dépend de la difficulté à les démonter, la manière dont est fixé la dalle lcd à la dalle lumineuse, et la longueur des "fiches".

SegmA — 2010-02-22 20:59:23

En effet, c'est énorme; je vais y réfléchir, ça paraît vraiment du bon !

Pour windows 7; je crois que je vais installer un windows xp mais en 32bits, afin d'avoir un meilleur rendu (les pilotes de la ps3eye d'AlexP ont l'air de freezer sur quelques config en 64bits avec seven, dont la mienne quand je suis à 30fps ou plus, donc je préfèrerais fixer ce problème rapidement et enfin avoir du 60/100 fps sans soucis =) )

Merci de ta réponse teofil; ça me motive à aller plus loin dans tout ce projet !

Comme dit précédemment, je tiendrais au courant lors de mes avancées !
See you ;)

SegmA — 2010-02-24 16:42:15

Allez, je reviens vous larguer une petite série de photos de mon avancée!
Néon fixé, je n'ai plus de soucis d'ombres sur ReacTIVision!

Qu'en pensez-vous? (Même si ça ne reste que du design; et que c'est en KNEX!)

Face avant:

http://img62.imageshack.us/img62/9800/24022010041.jpg

Face avant /nuit:

http://img208.imageshack.us/img208/2667/24022010042.jpg

Vue de côté:

http://img694.imageshack.us/img694/880/24022010045.jpg

Face arrière:

http://img208.imageshack.us/img208/6214/24022010048.jpg

Concernant la face arrière, c'est pas du "gadget"; s'il y a autant de knex; c'est pour assurer la plus grande stabilité de la caméra!

Bon, hormis tout ça, je suis repassé sur une config. : ubuntu/win7 x64/win7 x86.
Sur la 32 bits, j'obtiens un "petit" 30fps; mais qui me paraît pour l'instant suffisant.
Pour avoir du 60fps constant, faut que je boot sans aucun périphériques usb à part la ps3eye; la bande passante usb de mon pc est faible.
Si j'utilisais un hub usb alimenté sur secteur, aurais-je un meilleur rendement?!
A bientôt les amis !

pob — 2010-02-24 18:34:12

Je n'ai absolument aucun soucis sous windows7 64bits avec la PS3Eye. Mon ordi est léger côté CPU : Tablet PC Lenovo x61t. On est en Core2Duo LV à 1,6GHz par noyau. Donc très léger...
Enfin je touche du bois, mais ça marche très bien ici.

Dernière chose à propos de cette camera. Elle utilise un mode USB très particulier. Il ne faut pas brancher d'autre périphérique sur le même canal USB, ou du moins un périphérique qui ne fonctionne pas dans ce mode "bulk", c'est à dire la grande majorité. Par contre on peut brancher plusieurs PS3Eye sur le même contrôleur/hub sans ce problème.


A propos du frame rate... A quoi bon aller aussi haut ? A moins de faire du hockey sur glace avec vos palets, ça n'a aucun intérêt.
Peut-être que tes soucis proviennent de là plus que du driver.

Pour donner une idée, j'ai fait un touch pad avec une dalle tactile. Pour suivre le point de contact d'un doigt, je suis à environ une mesure toutes les 60ms voire 100ms... Et là c'est tout à fait suffisant. Si vous prenez votre calculette, on est entre 17 et 10 Hz.
Il vaut mieux lisser les contrôles entre les mesures que de mesurer beaucoup. Ca allège la partie la plus lourde sans causer de soucis niveau rendu.

SegmA — 2010-02-24 19:51:09

En effet, voici des tests que j'ai pu effectuer en fin d'aprem (et ENFIN le son enregistré est en bonne qualité!!! :cool:)





lien vers la page de la vidéo sur youtube



Je trouve le rendu bon pour 15fps. :D
Disons que tant qu'à faire, j'aurais aimé avoir la meilleure fluidité, le meilleur tracking de mes fiducials.
Mais il est vrai que pour ce que je vais en faire, les 15fps voir 30 me suffisent amplement!

Des améliorations seront à faire du côté <options> de la caméra: on peut le voir sur la vidéo, certains knob réagissent un peu tardivement; mais ce ne sont que de petites modifs, le résultat produit me convient parfaitement.

Pour le feedback vidéo, dès que j'ai l'occasion de récupérer un vidéo projecteur je me lance; je scierai mon meuble et ferai tout le nécessaire (LED IR etcetc...)

;)

emoc — 2010-02-25 10:53:12

pob a écrit:

A propos du frame rate... A quoi bon aller aussi haut ? A moins de faire du hockey sur glace avec vos palets, ça n'a aucun intérêt.

:)
Le framerate a plus d'importance dans le repérage des marqueurs que dans celui des blobs / doigts. Un framerate bas entraine des pertes dans le repérage des marqueurs quand il y a un mouvement rapide (rotation, translation), selon le traitement qui est fait de ces infos, ça peut provoquer des effets «non souhaités». D'ailleurs, avec une détection caméra par le haut, le cas peut aussi se présenter en bouchant la détection d'un marqueur, en passant la main au dessus par exemple.
Deux autres paramètres influent sur ce repérage, qui permettent de compenser le framerate : la luminosité (les caméras s'en sortent mieux pour capter des images avec une bonne luminosité) et la taille des marqueurs, plus c'est gros, plus c'est facilement reconnu par reactivision. En somme, il faut trouver le bon dosage, ou intégrer qu'un marqueur peut-être temporairement invisible sans modifier ce qu'il contrôle.

SegmA — 2010-02-26 16:25:22

Je repasse dans le coin pour vous informer que je me lance dans le feedback vidéo afin de tester la chose.
J'ai récupéré une antiquité : P4 1.7 GHz/768Mo de DDR/180 Go de DD/4 ports USB2/XP 32bits.
Je sais, ça fait pas rêver ! Mais est-ce suffisant?!

Pour vous résumer ce que je vais faire en cette après-midi (oui je raconte ma vie je sais ;) ):
Je vais tenter de faire tourner reactivision dessus avec ma ps3eye, et voir les limites que j'aurais (fps etc).
Si c'est convaincant (ce que j'espère malgré la machine utilisée), je vais extraire la carte mère, la fixer sur mon meuble, évidemment réaliser toute la connectique de manière la plus intelligente possible (niveau fixation/encombrement.
Une fois tout ceci fait (je pense que ça va me prendre du temps!), je vais tenter d'avoir un feedback vidéo sur mon moniteur LCD 15"; juste pour effectuer des tests donc.
La ps3eye sera toujours sur son support en hauteur par rapport à la table.

Si le tout est satisfaisant; je me prendrais un vidéoprojecteur type pico d'ici peu; bien que j'aimerais en savoir plus sur les lentilles de Fresnel (apparement très peu chères). J'ai lu qu'en règle générale, c'est un attrape-c*****on, et qu'on n'a pas le résultat souhaité; mais sait-on jamais!

Je vous tiens au courant as usual !

xray303 — 2010-02-26 17:50:55

hello,

Ton feedback video, tu veux le faire avec quoi ? processing,, pure data, MAX/MSP, etc .. ??

Nico

SegmA — 2010-02-26 17:56:00

@xray303: puredata/GEM/Fid_Abs, le taff d'asurmen m'ayant réellement bluffé !
J'espère en arriver jusque là! ;)

xray303 — 2010-03-01 01:11:51

Hello,

Fid_abs est effectivement un excellente idee etant donne que ca va te faciliter vachement le boulot...
dans les abs de pdmtl (maintenant nomme mtl) il y a aussi pas mal de truc utile, par exemple gem_scop qui te permettra d'utiliser le signal dans ton feedback video.
Je suis aussi en train de faire une reactable like mais ca stagne en ce moment du au manque de temps pour m'y consacrer.

Par contre je trouve que GEM est assez gourmant en ressource surtout lorsquîl faut dessiner le signal a l'ecran (1 source audio ca va mais 10 ca devient limite).

Bonne chance pour ton projet.

SegmA — 2010-03-02 15:47:13

Bon bon bon, je repasse dans le coin; je me suis "lancé" dans le feedback vidéo, et je ne pensais vraiment pas passer tant de temps à coder ça. On a rien sans rien comme dirait l'autre.

Je laisse de côté pure-data qui pour l'instant me paraît bien trop complexe pour moi; à mon niveau.
J'ai préféré regarder du côté de processing qui est bien plus dans mes capacités je pense.

J'arrive à réaliser un track de mes fids; mais pour l'instant toujours très basique, pas de fx etc...

J'ai essayé de suivre ce tutoriel (qui date plutôt, 2007): http://nuigroup.com/forums/viewthread/17/ mais qui me paraît vraiment excellent.

Bon le soucis que est que suivant ce tutoriel, arrivé au moment où je lance vvvv, avec le projet "vvvv2processing_blobtracker_backsubtract_new.v4p", lorsque j'effectue la partie 7.a, (donc clic droit sur le bouton nommé "Video In on/off"), je n'ai pas de rendu de la caméra à gauche (même en modifiant certains paramètres de gauche).
Je précise que normalement toutes mes librairies sont ok, j'ai suivi tous les pré-requis à la lettre.

Alors ma question est la suivante: est-ce un tutoriel obsolète, où est-ce tout simplement incompatible avec la ps3eye?!
Peut-être que la fausse manip' vient de mon côté...
Ca me ferait plaisir que quelqu'un m'indique le chemin à suivre pour un rendu simple, efficace et instructif niveau code (le feedback réalisé dans la vidéo du tutoriel me conviendrait amplement dans l'immédiat).

Ou même si quelqu'un avait des petits bouts de codes processing fonctionnels à m'envoyer par mp, ça me serait toujours extrêmement pratique pour une meilleure approche de ce monde-là!
Je reste évidemment conscient que chacun d'entre vous taffez comme des dingues pour parvenir à de superbes réalisations...

Merci à vous d'avance !

emoc — 2010-03-03 00:19:32

Salut Segma,

A priori, si tu te sers de processing pour le feedback, tu n'as pas besoin de vvvv. Processing récupères le flux OSC / TUIO qui sort de reactivision et tu n'as « plus qu'à » afficher tes objets visuels. Ou alors tu as décidé de te passer de reactivison ?

Est ce que tu as essayé le code de demo processing tuio qui est fourni avec la librairie? Dedans il y a le fonctionnement de base pour afficher des marqueurs et des blobs de doigts, il est assez court et c'est une bonne base.

SegmA — 2010-03-03 11:30:01

@emoc: Oui je m'en suis servi, j'ai effectué quelques modifs, j'arrive à changer le background de la couleur et de la dimension désirée, j'ai changé le code couleur héxa des objets afin de tester quelques trucs. Mes formes sont très bien détectées et sont dans la couleur que j'ai définie (rouge donc).
J'aimerais tout de même pouvoir changer la forme affichée sur mon écran; par défaut carrée, et pouvoir ajouter quelques effets (de ce type-là: http://vvvv.org/tiki-index.php?page=user+shaders). D'où mon intérêt pour vvvv avec le plugin oscP5 quitte à me passer de ReacTIVision. Mais si quelqu'un à des infos sur la modification directe des objets détectés via processing (forme rondes, effets visuels autour de l'objet etc), hésitez pas à m'en tenir au courant !

Et j'oubliais de te remercier emoc! Sympa de voir qu'il y a encore des admins qui sont concernés/s'intéressent aux projets des autres! :)


Juste pour le fun, j'ai fais ça:





lien vers la page de la vidéo sur youtube

emoc — 2010-03-03 23:34:35

Salut,

Quelques explications pour modifier la tuio demo et aller vers ce que tu veux. Voila une version modifiée de la demo :

Code (p5) :

/*
    TUIO processing demo - part of the reacTIVision project
    http://reactivision.sourceforge.net/

    Copyright (c) 2005-2009 Martin Kaltenbrunner <mkalten@iua.upf.edu>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

// we need to import the TUIO library
// and declare a TuioProcessing client variable
import TUIO.*;
TuioProcessing tuioClient;

// these are some helper variables which are used
// to create scalable graphical feedback
float cursor_size = 15;
float object_size = 60;
float table_size = 760;
float scale_factor = 1;
PFont font;

void setup()
{
  //size(screen.width,screen.height);
  size(640,480);
  noStroke();
  fill(0);
  
  loop();
  frameRate(30);
  //noLoop();
  
  hint(ENABLE_NATIVE_FONTS);
  font = createFont("Arial", 18);
  scale_factor = height/table_size;
  
  // we create an instance of the TuioProcessing client
  // since we add "this" class as an argument the TuioProcessing class expects
  // an implementation of the TUIO callback methods (see below)
  tuioClient  = new TuioProcessing(this);
}

// within the draw method we retrieve a Vector (List) of TuioObject and TuioCursor (polling)
// from the TuioProcessing client and then loop over both lists to draw the graphical feedback.
void draw()
{
  background(0);
  textFont(font,18*scale_factor);
  float obj_size = object_size*scale_factor; 
  float cur_size = cursor_size*scale_factor; 
   
  Vector tuioObjectList = tuioClient.getTuioObjects();
  for (int i=0;i<tuioObjectList.size();i++) {
     TuioObject tobj = (TuioObject)tuioObjectList.elementAt(i);
     stroke(0);
     fill(0);
     pushMatrix();
     translate(tobj.getScreenX(width),tobj.getScreenY(height));
     rotate(tobj.getAngle());
     drawObject(obj_size, tobj.getAngle());
     //rect(-obj_size/2,-obj_size/2,obj_size,obj_size);
     popMatrix();
     fill(255);
     text(""+tobj.getSymbolID(), tobj.getScreenX(width), tobj.getScreenY(height));
   }
   
   Vector tuioCursorList = tuioClient.getTuioCursors();
   for (int i=0;i<tuioCursorList.size();i++) {
      TuioCursor tcur = (TuioCursor)tuioCursorList.elementAt(i);
      Vector pointList = tcur.getPath();
      
      if (pointList.size()>0) {
        stroke(0,0,255);
        TuioPoint start_point = (TuioPoint)pointList.firstElement();;
        for (int j=0;j<pointList.size();j++) {
           TuioPoint end_point = (TuioPoint)pointList.elementAt(j);
           line(start_point.getScreenX(width),start_point.getScreenY(height),end_point.getScreenX(width),end_point.getScreenY(height));
           start_point = end_point;
        }
        
        stroke(192,192,192);
        fill(192,192,192);
        ellipse( tcur.getScreenX(width), tcur.getScreenY(height),cur_size,cur_size);
        fill(0);
        text(""+ tcur.getCursorID(),  tcur.getScreenX(width)-5,  tcur.getScreenY(height)+5);
      }
   }
   
}

void drawObject(float obj_size, float rot) {
  colorMode(HSB);
  for (float i=0; i<= TWO_PI; i++) {
    float x = random(20) * rot * cos(i);
    float y = random(20) * rot * sin(i);
    fill (rot * 40, 200, rot * 20 + 100);
    ellipse(x, y, rot*5, rot*5);
  }
}

// these callback methods are called whenever a TUIO event occurs

// called when an object is added to the scene
void addTuioObject(TuioObject tobj) {
  println("add object "+tobj.getSymbolID()+" ("+tobj.getSessionID()+") "+tobj.getX()+" "+tobj.getY()+" "+tobj.getAngle());
}

// called when an object is removed from the scene
void removeTuioObject(TuioObject tobj) {
  println("remove object "+tobj.getSymbolID()+" ("+tobj.getSessionID()+")");
}

// called when an object is moved
void updateTuioObject (TuioObject tobj) {
  println("update object "+tobj.getSymbolID()+" ("+tobj.getSessionID()+") "+tobj.getX()+" "+tobj.getY()+" "+tobj.getAngle()
          +" "+tobj.getMotionSpeed()+" "+tobj.getRotationSpeed()+" "+tobj.getMotionAccel()+" "+tobj.getRotationAccel());
}

// called when a cursor is added to the scene
void addTuioCursor(TuioCursor tcur) {
  println("add cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+ ") " +tcur.getX()+" "+tcur.getY());
}

// called when a cursor is moved
void updateTuioCursor (TuioCursor tcur) {
  println("update cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+ ") " +tcur.getX()+" "+tcur.getY()
          +" "+tcur.getMotionSpeed()+" "+tcur.getMotionAccel());
}

// called when a cursor is removed from the scene
void removeTuioCursor(TuioCursor tcur) {
  println("remove cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+")");
}

// called after each message bundle
// representing the end of an image frame
void refresh(TuioTime bundleTime) { 
  redraw();
}

En fait, il n'y a qu'un petit changement : au lieu d'afficher le marqueur par rect(), on le remplace par une fonction qui va faire un affichage personnalisé. Ici c'est drawObject qui "dessine" la forme associée au marqueur en fonction de 2 paramètres transmis par tuio (la taille et la rotation):

Code (p5) :

void drawObject(float obj_size, float rot) {
  colorMode(HSB);
  for (float i=0; i<= TWO_PI; i++) {
    float x = random(20) * rot * cos(i);
    float y = random(20) * rot * sin(i);
    fill (rot * 40, 200, rot * 20 + 100);
    ellipse(x, y, rot*5, rot*5);
  }
}

A toi de mettre ce que tu veux dans cette fonction!

Maintenant, si tu veux aller plus loin, il faut donner une certaine persistence aux objets, qu'ils ne soient pas redessinés depuis rien à chaque boucle de draw(). L'idéal pour ça, c'est de créer une classe qui représente tes objets, d'instancier chacun, et de mettre à jour les paramètres en fonction des infos transmises par tuio (position, affiché / pas affiché). Une fois que c'est fait, tu as un espace 2D ou 3D, avec des objets que tu peux faire interagir selon les règles que tu veux. Si tu ne veux pas te lancer dans la programmation avec objets, tu peux aussi utiliser un tableau / array et y stocker des paramètres.

SegmA — 2010-03-04 11:16:20

Emoc je te remercie une fois de plus, grâce à ton exemple j'ai pu plus comprendre le fonctionnement global de processing!
Je me suis amusé à faire quelques changements, pour voir les limites et les capacités de cette prog.
Je n'en dis pas plus, je suis des tutoriels pour aller plus loin; je repasserais avec une vidéo quand j'aurais bien poussé ma bête ^^!
A bientôt,

SegmA`

videoactif — 2010-03-05 06:09:57

cool ton projet, ça me donne envie de me mettre au k'nex