Annonce

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


#1 2011-02-26 16:04:10 Extrusion & log de modélisation 3D

void_draw
nouveau membre
Date d'inscription: 2011-02-26
Messages: 7

Extrusion & log de modélisation 3D



Bonjour à tous !

Je découvre depuis peu Processing, et suis en train d'étudier l'exemple "extrusion" fourni par défaut. Le code permet de faire "éclater" les pixels d'une image plane, selon leur brillance (* voir code ci-dessous). Plusieurs questions me viennent, auxquelles je n'arrive pas encore à répondre :
- est-il possible de remplacer la caractéristique "brightness" par une autre, qui agirait sur une autre information contenue dans les pixels ?
- comment faire pour obtenir les coordonnées dans l'espace de chaque pixel de l'image transformée, et les réinjecter dans un logiciel de simulation 3D, de manière à avoir une pré-modélisation d'objet?
Cette question de transfert entre Processing et un logiciel de modélisation 3D m'intéresse particulièrement. N'hésitez pas à soumettre la moindre piste en rapport ! Merci d'avance pour votre partage précieux, vive le web opensource et à bientôt j'espère smile

*Code par défaut :

PImage extrude;
int[][] values;
float angle = 0;

void setup() {
  size(640, 360, P3D);
 
  extrude = loadImage("nom_image_stockee_dans_data.jpg");
  extrude.loadPixels();
  values = new int[extrude.width][extrude.height];
  for (int y = 0; y < extrude.height; y++) {
    for (int x = 0; x < extrude.width; x++) {
      color pixel = extrude.get(x, y);
      values[x][y] = int(brightness(pixel));
    }
  }
}

void draw() {
  background(0);
 
  angle += 0.005;
 
  translate(width/2, 0, -128);
  rotateY(angle); 
  translate(-extrude.width/2, 100, -128);
 
  for (int y = 0; y < extrude.height; y++) {
    for (int x = 0; x < extrude.width; x++) {
      stroke(values[x][y]);
      point(x, y, -values[x][y]);
    }
  }

}

Hors ligne

 

#2 2011-02-26 16:47:41 Re : Extrusion & log de modélisation 3D

oyster_twiter
membre
Lieu: saint-herblain
Date d'inscription: 2008-04-01
Messages: 444
Site web

Re: Extrusion & log de modélisation 3D



Bonjour et bienvenu !

je vais tenter de répondre au mieux à tes questions.big_smile

citation :

- est-il possible de remplacer la caractéristique "brightness" par une autre, qui agirait sur une autre information contenue dans les pixels ?

oui, en principe processing te permet de faire tout et n'importe quoi tongue
ici tu pourras changer brightness par saturation par ex. + d'info dans les ref p5 :http://processing.org/reference/

citation :

- comment faire pour obtenir les coordonnées dans l'espace de chaque pixel de l'image transformée, et les réinjecter dans un logiciel de simulation 3D, de manière à avoir une pré-modélisation d'objet?

Il existe des librairies capable d'exporter ton rendu sous differents formats 3D:

citation :

» supercad
by Guillaume Labelle
Lets you export code to many 3d formats such as AutoCAD, Rhino, or SketchUP.

ça devrait t'éviter de calculer la position de chaque pixel dans ton image...manip un peu lourde à faire :

PGraphics3 pg3;

void setup()
{
  size(400,400,P3D);
  pg3=(PGraphics3)g;
}

void draw()
{
  .. stuff ..
  color c=get(x,y); 
  float z=pg3.zbuffer[x+y*width]; // z-value is a float
}

(merci à JohnG pour ce code trouvé sur le forum P5).

bonne suite.

Dernière modification par oyster_twiter (2011-02-27 22:12:10)

Hors ligne

 

#3 2011-02-27 22:01:22 Re : Extrusion & log de modélisation 3D

void_draw
nouveau membre
Date d'inscription: 2011-02-26
Messages: 7

Re: Extrusion & log de modélisation 3D



Hello oyster_twiter ! smile

Merci beaucoup pour l'accueil, et la réponse rapide !
J'ai compris ta réponse à ma 1ère question, et suis en train de me plonger dans les nombreuses refs, c'est super pour découvrir!
Pour la 2ème réponse, j'ai du mal à y croire tant tu me rends un grand service. Au stade de mes connaissances minimes, j'avoue ne pas encore savoir quoi faire précisément de tes précieuses ressources, même si je suis en train de tester différentes manips.
J'ai téléchargé la librairie de Guillaume Labelle sans souci, mais je ne suis même pas sûr de savoir où la placer encore... de même pour ce code miracle que tu m'as généreusement déniché, s'agit-il d'un fichier à sauver à part, où à intégrer dans mon code extrusion?

J'ai lu aussi qu'il fallait que je colle le code suivant :
beginRaw("superCAD.exportFormat", "outputPath.ext"); [...] endRaw();
dans ma méthode draw(), mais là encore je manipule un peu trop de manière hasardeuse... jusqu'ici je l'ai collé comme ça dans mon code d'origine:

...
void draw() {
  background(255);
  beginRaw("superCAD.exportFormat", "outputPath.ext"); [...] endRaw()
 
  // Update the angle
  angle += 0.02;
...

même si jusqu'ici rien ne marche, ça se tient? Je pose sans doute des questions évidentes du fait de mon niveau très très débutant, et je crains d'être au stade où, pour le 1er essai, je nécessite un pas-à-pas un peu galère presqu'au clic près... m'enfin je travaille pour y remédier!

Merci d'avance si tu as le temps de te plier à un décorticage laborieux de ta 1ère réponse, et en tous les cas merci encore pour tout, grâce à toi je sens la voie toute proche ! Bonne soirée et à bientôt wink!

Hors ligne

 

#4 2011-02-27 23:00:14 Re : Extrusion & log de modélisation 3D

oyster_twiter
membre
Lieu: saint-herblain
Date d'inscription: 2008-04-01
Messages: 444
Site web

Re: Extrusion & log de modélisation 3D



Salut,

J'ai pas trop de temps à t'accorder tout de suite, mais je peux essayer de faire avancer le Schmilblick un tant soit peu.

Tu dis que tu n'es pas sûr d'avoir bien placé ta librairie ... normalement tu a un dossier sketchbook quelque part, en principe c'est là que l'on sauvegarde les sketchs.
A l'intérieur de sketchbook il y a un dossier 'libraries' .
Tu places ta librairie dedans, ce qui devrait te donner :

citation :

|_libraries
      |_superCad
            |_library
                 |_superCad.jar
            |_src ...

si la lib est correctement installée tu devrais la voir apparaître dans processing -> sketch -> import library.

L'exemple qui est proposé sur la page d'accueil de superCAD est plutôt explicite...Je vois pas bien ce que tu as pris/laissé de côté...le mieux serait que tu montres ton code, pour qu'on puisse te dire ou le bât blesse.

+++

Hors ligne

 

#5 2011-02-28 00:36:49 Re : Extrusion & log de modélisation 3D

void_draw
nouveau membre
Date d'inscription: 2011-02-26
Messages: 7

Re: Extrusion & log de modélisation 3D



Merci encore !
C'est vraiment sympa de se pencher sur le problème.

La lib apparaît bien dans Processing, merci pour le détail. Par contre je n'ai clairement pas assez de connaissances encore, alors je bidouille mon sketch, j'essaye de rester le plus possible logique en attendant mieux... voilà mon code modifié pour le moment :

PImage extrude;
int[][] values;
float angle = 0;
PGraphics pg;

void setup()
{
  size(640, 360, P3D);
  extrude=(PImage)g;
  pg=(PGraphics)g;

  extrude = loadImage("image.jpg");
  extrude.loadPixels();
  values = new int[extrude.width][extrude.height];
  for (int y = 0; y < extrude.height; y++) {
    for (int x = 0; x < extrude.width; x++) {
      color pixel = extrude.get(x, y);
      values[x][y] = int(brightness(pixel));
    }
  }
}

void draw()
{
  background(0);
  beginRaw("superCAD.exportFormat", "outputPath.ext"); endRaw();

  angle += 0.005;

  translate(width/2, 0, -128);
  rotateY(angle);
  translate(-extrude.width/2, 100, -128);

  for (int y = 0; y < extrude.height; y++) {
    for (int x = 0; x < extrude.width; x++) {
      stroke(values[x][y]);
      point(x, y, -values[x][y]);
      color c=get(x,y);
      float z=pg.zbuffer[x+y*width]; // z-value is a float
    }
  }
}


Le message d'erreur que j'ai est "pg.zbuffer cannot be resolved or is not a field"... je vois bien à quelle ligne ça cloche mais je comprends déjà pas ce que je fais, donc difficile de résoudre le problème neutral
J'espère ne pas trop écrire n'importe quoi avec mes copier-coller...

+++ et merci !

Hors ligne

 

#6 2011-02-28 21:10:18 Re : Extrusion & log de modélisation 3D

oyster_twiter
membre
Lieu: saint-herblain
Date d'inscription: 2008-04-01
Messages: 444
Site web

Re: Extrusion & log de modélisation 3D



Salut void-draw,

citation :

J'espère ne pas trop écrire n'importe quoi avec mes copier-coller...

...bon hmm
En fait il manque quelques trucs pour que ça marche. Je veux bien t'aiguiller, mais je penses qu'il faudrait que tu zyeutes un peu le floss manual en français par exemple smile
peut-être commencer simplement...smile

Ici dans le code que tu fais suivre, il manque l'essentiel : si tu veux utiliser une librairie dans processing, il faut que tu l'importes :

import superCAD.*;

Si ce que tu souhaites c'est d'exporter une forme 3D pour pouvoir la retravailler dans un autre soft, alors tu n'as pas besoin de passer par zbuffer ... il te suffit de conserver le code de l'exemple 'extrusion' et d'y ajouter les parties spécifiques à la lib SuperCAD.

Cette partie :

PGraphics3 pg3;

void setup()
{
  size(400,400,P3D);
  pg3=(PGraphics3)g;
}

void draw()
{
  .. stuff ..
  color c=get(x,y); 
  float z=pg3.zbuffer[x+y*width]; // z-value is a float
}

Il ne faut pas essayé de l'implémenter, c'était pour te montrer au contraire que ça risquait d'être galère... smile

Bon essaye de repartir simplement sur extrusion et puis import supercad etc.

bonne suite.

Dernière modification par oyster_twiter (2011-02-28 21:10:57)

Hors ligne

 

#7 2011-03-01 12:27:03 Re : Extrusion & log de modélisation 3D

void_draw
nouveau membre
Date d'inscription: 2011-02-26
Messages: 7

Re: Extrusion & log de modélisation 3D



Salut à toi oyster_twiter !

Bon, j'ai encore pas mal de boulot big_smile... je lis déjà des manuels sur Processing, mais je veux aller plus vite que la musique et tu as raison de me le rappeler. J'espérais juste pouvoir avancer rapidement sur cet exemple précis (avec de l'aide wink), puisque sans lui malheureusement toutes mes expérimentations majeures sont condamnées à stagner.

Comme tu le dis, je souhaite juste exporter la forme de mon image "extrusée", même si visiblement ce n'est pas si simple. Ce que j'avoue ne pas saisir, c'est lorsque tu me dis que je n'ai pas besoin de passer par zbuffer, alors que dans les parties spécifiques à la lib SuperCAD que tu me donnes gracieusement, il y a justement une ligne qui fait appel à zbuffer?

J'ai continué les essais et réussi à exporter en divers formats, seulement ces fichiers sont vides, il y a un message d'erreur qui m'explique que SuperCAD "only supports lines and triangles". Peut-être que ce que j'essaye de faire n'est tout simplement pas possible.

Je continue mes recherches et lectures, merci pour ta patience et ta générosité! A bientôt!

Hors ligne

 

#8 2011-03-01 20:49:19 Re : Extrusion & log de modélisation 3D

emoc
@#@*$
Lieu: Quimper
Date d'inscription: 2008-01-28
Messages: 1576
Site web

Re: Extrusion & log de modélisation 3D



(discussion déplacée dans le forum processing)

Hors ligne

 

#9 2011-03-08 15:49:10 Re : Extrusion & log de modélisation 3D

void_draw
nouveau membre
Date d'inscription: 2011-02-26
Messages: 7

Re: Extrusion & log de modélisation 3D



Bon, malheureusement je n'avance pas sur ce fameux code. ça semble simple en pratique, mais impossible pour moi d'exporter mon rendu extrusion sur un log 3D, quel qu'il soit.
Si quelqu'un a la patience et la générosité pour se pencher davantage sur ce problème auquel j'attache beaucoup d'importance, ça me permettrait de grandes avancées par la suite.
Merci d'avance à tous.

Hors ligne

 

#10 2011-03-09 10:04:49 Re : Extrusion & log de modélisation 3D

oyster_twiter
membre
Lieu: saint-herblain
Date d'inscription: 2008-04-01
Messages: 444
Site web

Re: Extrusion & log de modélisation 3D



Salut ,

J'ai essayé de croiser les sketches 'extrusion' et l'exemple 1 de la lib SuperCad.
J'ai rencontré une erreur car pour l'instant supecad n'accepte pas la fonction point() de processing, donc c'est impossible actuellement d'exporter dans un des formats que propose supercad avec des points. Il existe peut être d'autres solutions (autres librairies...) à voir.

J'ai par conter réussi à exporter dans un format sketchup à partir du moment ou j'ai remplacer point() par line(). Ce qui ne rend pas grand chose visuellement je te l'accorde.
voici le code mix :

/**
 * Extrusion. 
 * 
 * Converts a flat image into spatial data points and rotates the points
 * around the center.
 */
import superCAD.*;

String cadSoftware, ext;
boolean record = false;
PImage extrude;
int[][] values;
float angle = 0;

void setup() {
  size(640, 360, P3D);

  // Load the image into a new array
  extrude = loadImage("ystone08.jpg");
  extrude.loadPixels();
  values = new int[extrude.width][extrude.height];
  for (int y = 0; y < extrude.height; y++) {
    for (int x = 0; x < extrude.width; x++) {
      color pixel = extrude.get(x, y);
      values[x][y] = int(brightness(pixel));
    }
  }
}

void draw() {
  background(0);


  // Update the angle
  angle += 0.005;


  if(record)
    beginRaw("superCAD."+cadSoftware, "output."+ext);  

  // Rotate around the center axis
  translate(width/2, 0, -128);
  rotateY(angle);  
  translate(-extrude.width/2, 100, -128);

  // Display the image mass
  for (int y = 0; y < extrude.height; y++) {
    for (int x = 0; x < extrude.width; x++) {
      stroke(values[x][y]);
      line(x, y, x+10, y+10);
      // pour l'instant supercad n'accepte pas pour l'instant la fonction point()
      //point(x, y, -values[x][y]);
    }
  }


  if (record) {
    endRaw();
    record = false;
  }
}

void keyPressed() {

  switch(key) {
  case 'r': 
    cadSoftware = "Rhino"; 
    ext = "rvb"; 
    break;
  case 's': 
    cadSoftware = "SketchUP"; 
    ext = "rb";
    break;
  case 'a': 
    cadSoftware = "AutoLISP"; 
    ext = "lsp";
    break;
  case 'p': 
    cadSoftware = "PovRAY"; 
    ext = "pov";
    break;
  case 'm': 
    cadSoftware = "Maya"; 
    ext = "mel";
    break; 
  case 'o': 
    cadSoftware = "ObjFile"; 
    ext = "obj";
    break;       
  case 'c': 
    cadSoftware = "ArchiCAD"; 
    ext = "gdl";
    break;
  }
  record = true;
}

+++

Hors ligne

 

#11 2011-03-09 10:59:49 Re : Extrusion & log de modélisation 3D

void_draw
nouveau membre
Date d'inscription: 2011-02-26
Messages: 7

Re: Extrusion & log de modélisation 3D



Salut oyster_twiter!

Tout d'abord MERCI de chercher avec et pour moi ! Sans toi je me sentirais bien seul sur ce problème.

Tu as rencontré la même erreur que moi avec la fonction point(), comme je le craignais ça tient de la librairie. Néanmoins tu as déjà réussi à faire fonctionner le code avec line(), et même si ça change le rendu c'est déjà une avancée pour moi.
J'ai essayé ton code sur une image, et le fichier .rb pèse presque 50 Mo, quand les fichiers par défaut de SketchUp pèsent entre 1 et 5 Ko. J'ai placé ce fichier obtenu via Processing dans C:/Program Files/Google/Google SketchUp 8/Plugins mais sans surprise, cela fait bugger SketchUp.
Par contre, en faisant le même essai avec l'exemple 1 d'Autocad, qui joue sur des formes et n'importe pas d'image, le fichier .rb pèse 259 Ko et s'ouvre impeccablement avec SketchUp. D'après ce constat, j'ai peur de ne pas pouvoir gérer d'images avec cette manip depuis Processing, d'autant qu'après l'opération d'extrusion elle est en général complexe.

Suite au problème de la fonction point(), j'avais cherché d'autres librairies pour exporter de la 3D, et j'étais tombé sur cette adresse : http://processing3d.com/ ainsi que la librairie Anar+ (qui a l'air d'intégrer Autocad?) http://anar.ch/ qui dit notamment gérer les "Geometric datastructure (groups, objects, faces, lines, points)" dont les points...
J'ai l'impression qu'il y a une vraie voie en ce sens, n'hésite pas à me dire si je me trompe. Je tente de décortiquer le tutorial, qui gère effectivement des points avec la fonction Pt.create(), même si malheureusement il n'importe pas une image comme moi. Apparemment cette fonction permet de créer une "Transmigration Operation", qui m'a tout l'air d'être le principe du code extrusion, non?

Merci pour ta lecture et ton secours de si bon matin, et à bientôt j'espère !

Hors ligne

 

#12 2011-03-09 11:26:18 Re : Extrusion & log de modélisation 3D

void_draw
nouveau membre
Date d'inscription: 2011-02-26
Messages: 7

Re: Extrusion & log de modélisation 3D



Re !

Anar+ est visiblement un super kit de librairies, avec un site très complet, rien que les exemples valent le coup d'oeil. Et au passage, il a été créé par Nembrini... et Guillaume Labelle wink

Sur la page http://anar.ch/info/tutorial:3dobjects, il intègre justement un exemple d'extrusion! Peut-être qu'on approche d'une solution?!
Par contre comme je ne suis pas encore capable de faire fonctionner ce super exemple en y intégrant mon image. Je continue mes recherches, et reste ouvert au moindre conseil smile!

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024