Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2013-02-20 18:15:53 dessiner un cube avec des sphères

Marty
membre
Date d'inscription: 2012-04-27
Messages: 143

dessiner un cube avec des sphères



Salut à toutes et à tous,

Je me lance dans Processing, aussi j'ai encore un peu du mal avec toutes ses subtilités !

L'idée finale, c'est de créer une forme "active" formée de billes qui seront cliquables. Cette forme formera une sorte d'interface interctive. Au final il faudra pouvoir visualiser cette forme, tourner autour, zoomer etc... et cliquer sur les boutons (billes). Tout ça n'est pas encore au gout du jour !

L'idée c'est déja de réussir à créer cette forme : un cube de 4x4x4 formé par un assemblage de billes (64 spheres). Un peu comme un Rubiks Cube mais avec les éléments en spheres et écartées les unes des autres.

J'ai besoin de mémoriser certaines caractéristiques de chaque bille : position, couleur, état etc... afin de pouvoir interragir avec. J'ai donc créé un objet Bille avec ses caractéristiques et méthodes simples pour commencer.

J'ai instancié 64 Billes, il me faut maintenant les positionner.

Certes je peux les place une par une précisément, mais je voulais faire ça proprement, avec une jolie boucle mais impossible de trouver une logique propre.

Si quelqu'un à une idée...

pour l'instant j'en suis ici :

Bille[] Cube = new Bille[64];

void setup() {
  smooth(); 
  size(640, 480, P3D); 
  for (int i=0;i<64;i++) {
    Cube[i] = new Bille(100, 100, 0, false, 120);
  }
}

void draw() {
  background(0); 
  noStroke(); 
  lights();
}

class Bille {
  int x;
  int y;
  int z;
  boolean On;
  color bColor;

  Bille (int xPos, int yPos, int zPos, boolean state, color col) {
    x = xPos;
    y = yPos;
    z = zPos;
    isOn = state;
    bColor = col;
  }

  void display() {
    pushMatrix();
    translate(x,y,z);
    fill(bColor);
    sphere(10);
    popMatrix();
  }
}

Dernière modification par Marty (2013-02-20 18:19:15)

Hors ligne

 

#2 2013-02-21 07:39:17 Re : dessiner un cube avec des sphères

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: dessiner un cube avec des sphères



Cela te convient-il :

Bille[] cube = new Bille[64];

void setup() {
  smooth(); 
  size(640, 480, P3D); 
  int i = 0;
  for (int z = 0; z < 4; z++) {
    for (int y = 0; y < 4; y++) {
      for (int x = 0; x < 4; x++) {
        cube[i] = new Bille(x, y, z, false, 120);
        i++;
      }
    }
  }
}

void draw() {
  background(0); 
  noStroke(); 
  lights();
  translate(200, 200, 0);
  for (int i = 0; i < 64; i++) {
    cube[i].display();
  }
}

class Bille {
  int x;
  int y;
  int z;
  boolean isOn;
  color bColor;

  Bille (int xPos, int yPos, int zPos, boolean state, color col) {
    x = xPos;
    y = yPos;
    z = zPos;
    isOn = state;
    bColor = col;
  }

  void display() {
    pushMatrix();
    translate(x * 50, y * 50, z * 50);
    fill(bColor);
    sphere(10);
    popMatrix();
  }
}

J'ai différencier position dans le cube et affichage.

Si on veut faire le cuistre pour la boucle d'initialisation :

  for (int i = 0; i < 64; i++) {
    cube[i] = new Bille(i % 4, (i / 4) % 4, (i / 16) % 4, false, 120);
  }

Dernière modification par Mushussu (2013-02-21 08:41:29)

Hors ligne

 

#3 2013-02-21 09:09:40 Re : dessiner un cube avec des sphères

Marty
membre
Date d'inscription: 2012-04-27
Messages: 143

Re: dessiner un cube avec des sphères



Ahah ! bravo c'est parfait.
J'y étais presque ! enfin dans la forme (l'imbrication des boucles for). Mais ça donnait un truc très bizarre. D'ailleurs étrange, ca faisait une sorte d'animation infinie, pas compris !

Mais bien vu la création direct dans l'initialisation, truc tout bête mais je n'y avait pas pensé.

Bon reste à rendre tout ça interactif......

Bref ya encore du boulot !

Hors ligne

 

#4 2013-02-21 10:33:10 Re : dessiner un cube avec des sphères

Leuprochon
nouveau membre
Date d'inscription: 2013-02-20
Messages: 6

Re: dessiner un cube avec des sphères



Mmm, merci, ça va me servir à moi aussi je pense !

Quentin

Hors ligne

 

#5 2013-02-21 11:50:17 Re : dessiner un cube avec des sphères

Marty
membre
Date d'inscription: 2012-04-27
Messages: 143

Re: dessiner un cube avec des sphères



J'ai juste apporté quelques modifs pour remettre les billes dans le bon sens wink pour moi la première bille est en bas à gauche et on commence à compter dans la profondeur (axe z)

Bille[] cube = new Bille[64];

void setup() {
  //smooth(); 
  size(500, 480, P3D); 
  int c = 0;
  for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
      for (int k = 0; k < 4; k++) {
        cube[c] = new Bille(j, -i, -k, false, 120);
        c++;
      }
    }
  }
}

void draw() {
  background(0); 
  noStroke(); 
  lights();
  translate(150, 300, 0);
  for (int i = 0; i < 64; i++) {
    switch (i) {
     case 0 : cube[i].bColor = color(255,255,255); break;
     case 12 : cube[i].bColor = color(255,0,0); break;
     case 48 : cube[i].bColor = color(0,255,0); break;
     case 60 : cube[i].bColor = color(0,0,255); break;
    }
    cube[i].display();
  }
}

class Bille {
  int x;
  int y;
  int z;
  boolean isOn;
  color bColor;

  Bille (int xPos, int yPos, int zPos, boolean state, color col) {
    x = xPos;
    y = yPos;
    z = zPos;
    isOn = state;
    bColor = col;
  }

  void display() {
    pushMatrix();
    translate(x * 50, y * 50, z * 50);
    fill(bColor);
    sphere(5);
    popMatrix();
  }
}

Au passage c'est quoi l'astuce pour interagir avec la souris dans un espace 3D ? par exemple si je veux cliquer sur une bille au fond du cube la souris me donne (a priori) les coordonnées en x et y mais quid du z ?

Faut-il "écraser" la perspective pour la remettre en 2D ?

merci pour le coup de pouce en tout cas !

Hors ligne

 

#6 2013-02-21 17:52:39 Re : dessiner un cube avec des sphères

cgiles
membre
Lieu: Est de la France
Date d'inscription: 2005-05-25
Messages: 329

Re: dessiner un cube avec des sphères



alors pour intéragir avec des objets 3d via la souris, il faut avoir recours au picking :
ça consiste a rendre deux fois la scène, une fois le rendu affiché, une autre fois un rendu en nuance de gris, ou chaque objet a une teinte différente. Donc le logiciel n'as plus qu'a déterminé sur quel teinte était la souris quand tu as cliqué.
et il existe une librairie processing pour ça : http://code.google.com/p/processing-picking-library/

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024