Annonce

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


#1 2012-06-11 13:57:15 appliquer texture aléatoire sur objets 3d importés

Ambre
nouveau membre
Date d'inscription: 2012-06-11
Messages: 9

appliquer texture aléatoire sur objets 3d importés



Bonjour,

Je suis débutante sur processing.. je ne connais que quelques bases...
Je souhaiterais savoir comment importer des objets 3d réalisés avec sculptris (lowpoly en .obj), afin d'y appliquer sur processing des textures (en .jpeg ou.png) sur la surface de manière aléatoire.
Je voudrais que les objets 3d soient également appelés de manière aléatoire.

Pouvez-vous m'aider ? smile

Merci beaucoup.

Ambre

Hors ligne

 

#2 2012-06-11 19:11:53 Re : appliquer texture aléatoire sur objets 3d importés

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

Re: appliquer texture aléatoire sur objets 3d importés



Salut, sur cette page tu trouveras une partie de ton bonheur :
http://processing.org/reference/librari … ort_export
il y a deux librairies pour importer du .obj

Hors ligne

 

#3 2012-06-11 20:06:17 Re : appliquer texture aléatoire sur objets 3d importés

Ambre
nouveau membre
Date d'inscription: 2012-06-11
Messages: 9

Re: appliquer texture aléatoire sur objets 3d importés



Super merci !
J'ai déjà réussi à importer mon .obj sans la texture. C'est parfait.

Du coup si dans un premier temps je veux importer mes objets 3D de manière aléatoire (j'en ai 20), je les mets dans une boucle for ? Comment je peux coder ça ?
Par contre je ne vois pas du tout comment appliquer la texture directement sur l'objet, pourtant j'en ai mis une dans mon dossier data pour tester mais cela ne fonctionne pas... (j'en aurais plusieurs de manière aléatoire toujours.. enfin il faudrait déjà que j'arrive à appliquer une texture smilesmile)
J'ai ce code pour l'instant :

import saito.objloader.*;

OBJModel model ;

float rotX, rotY;

void setup()
{
    size(800, 600, P3D);
    frameRate(30);
    model = new OBJModel(this, "lowpoly1.OBJ", "absolute");
    model.enableDebug();

    model.scale(100);
    model.translateToCenter();

    stroke(255);
    noStroke();
}



void draw()
{
    background(129);
    lights();
    pushMatrix();
    translate(width/2, height/2, 0);
    rotateX(rotY);
    rotateY(rotX);

    model.draw();

    popMatrix();
}

boolean bTexture = true;
boolean bStroke = false;


void mouseDragged()
{
    rotX += (mouseX - pmouseX) * 0.01;
    rotY -= (mouseY - pmouseY) * 0.01;
}


Merci beaucoup !
Bonne soirée.

Hors ligne

 

#4 2012-06-11 21:09:36 Re : appliquer texture aléatoire sur objets 3d importés

Ambre
nouveau membre
Date d'inscription: 2012-06-11
Messages: 9

Re: appliquer texture aléatoire sur objets 3d importés



Au final j'ai réussi à appliquer ma texture sur mon objet, car c'était une texture que j'avais défini d'emblée dans le logiciel de 3D qui allait avec l'objet obj. Du coup j'ai compris le fonctionnement, à peu près.
Mais du coup si je souhaite appeler de manière aléatoire une multitude de textures pour un objet, est-ce possible ? (le nom de sa texture de base, et ses dérivé 2,3,4...)

Comment puis-je créer une variable comme celle ci :

void keyPressed()
{
    if(key == 't') {
        if(!bTexture) {
            model.enableTexture();
            bTexture = true;
        }
        else {
            model.disableTexture();
            bTexture = false;
        }
    }

mais qui me permette de changer la texture? appeler texture1, 2, 3.... en random.

Merci smile

Dernière modification par Ambre (2012-06-11 21:55:19)

Hors ligne

 

#5 2012-06-11 23:42:05 Re : appliquer texture aléatoire sur objets 3d importés

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

Re: appliquer texture aléatoire sur objets 3d importés



tout simplement ça :
http://thequietvoid.com/client/objloade … ml#texture(PImage)
et tu l'applique en faisant ça : model.texture("tonPImage");
Pour charger plusieurs models il te suffit d'user des array, tu en fait pour tes objets, un avec tes textures en PImage et deux arrays string, un qui contient les noms de tes fichiers objets, un autre qui contient les noms de tes images

Hors ligne

 

#6 2012-06-12 00:08:28 Re : appliquer texture aléatoire sur objets 3d importés

Ambre
nouveau membre
Date d'inscription: 2012-06-11
Messages: 9

Re: appliquer texture aléatoire sur objets 3d importés



Merci pour tes conseils.
J'ai un peu de mal avec les array...
C'est ce que j'essayais de faire mais soit ça me marque dans la console que la méthode PImage n'est pas applicable dans la (String) pour le type OBJModel en gros, soit cela me dit que je mixe le "active" et le "static" mode...

Hors ligne

 

#7 2012-06-12 08:47:08 Re : appliquer texture aléatoire sur objets 3d importés

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

Re: appliquer texture aléatoire sur objets 3d importés



Voici a quoi ton code devrait ressembler pour fonctionner :

import saito.objloader.*;

OBJModel[] model=new OBJModel[2] ;
PImage[] textureObjet=new PImage[2];
String[] listeObjet={"dma0.obj","dma1.obj"};
String[] listeTexture={"texture0.jpg","texture1.jpg"};
float rotX, rotY;

void setup()
{
    size(800, 600, P3D);
    frameRate(30);
    for(int i=0;i<model.length;i++){
    model[i] = new OBJModel(this, listeObjet[i], "absolute");
    model[i].enableDebug();

    model[i].scale(10);
    model[i].translateToCenter();
    textureObjet[i]=loadImage(listeTexture[i]);
    }
    stroke(255);
    noStroke();
}



void draw()
{
    background(129);
    lights();
    pushMatrix();
    translate(width/2, height/2, 0);
    rotateX(rotY);
    rotateY(rotX);

    model[0].draw();

    popMatrix();
}

boolean bTexture = true;
boolean bStroke = false;


void mouseDragged()
{
    rotX += (mouseX - pmouseX) * 0.01;
    rotY -= (mouseY - pmouseY) * 0.01;
}

Dernière modification par cgiles (2012-06-12 08:47:25)

Hors ligne

 

#8 2012-06-12 12:00:27 Re : appliquer texture aléatoire sur objets 3d importés

Ambre
nouveau membre
Date d'inscription: 2012-06-11
Messages: 9

Re: appliquer texture aléatoire sur objets 3d importés



Ha oui effectivement j'avais mélangé les PImage et les String. Merci beaucoup !

En ce qui concerne le mixage du "active" et du "static" mode, c'est lorsque j'essaye justement d'appeler ces objets en aléatoire, avec la fonction void keyPressed. Car là n'apparait toujours que le premier objet de la liste. Et si je tente d'ajouter un random ça bloque. Les deux ne sont pas compatibles ?

Hors ligne

 

#9 2012-06-12 12:29:24 Re : appliquer texture aléatoire sur objets 3d importés

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

Re: appliquer texture aléatoire sur objets 3d importés



les arrays ont besoin d'un int, or les randoms retourne des floats, donc faut que tu castes la valeur retourné par le random, ce qui donne un int intRadom= (int)random(10);
int random sera compris entre 0 et 9
Je te conseille d'initaliser une valeur int au debut de ton programme, puis lors du draw de faire appel a lui comme référence pour ton array model, et simplement de le changer lors du keyPressed
void keyPressed(){
taVariable = (int)random(20);
}

Hors ligne

 

#10 2012-06-12 13:01:51 Re : appliquer texture aléatoire sur objets 3d importés

Ambre
nouveau membre
Date d'inscription: 2012-06-11
Messages: 9

Re: appliquer texture aléatoire sur objets 3d importés



Ok d'accord. J'vais essayer ça.
Merci encore! C'est pas toujours évident big_smile

Hors ligne

 

#11 2012-06-12 14:03:59 Re : appliquer texture aléatoire sur objets 3d importés

Ambre
nouveau membre
Date d'inscription: 2012-06-11
Messages: 9

Re: appliquer texture aléatoire sur objets 3d importés



Bon en fait, j'ai eu des cours sur les bases des bases de processing, donc du coup je ne sais pas réellement coder, je fais surtout du copier coller, et j'arrive à adapter certains trucs en regardant les références.
Mais là j'comprends pas du tout. J'arrive pas à coder le int random dont tu me parles.
Et je ne sais pas du tout comment faire appel à lui dans le draw par le code. à quoi correspond ma variable ? à celle que je dois créer (si j'y arrive) par rapport au random ou à model ?

En fait j'comprends bien ce que tu veux m'dire big_smile mais je ne saisis pas comment on le code... j'fais plein d'erreurs :S

Hors ligne

 

#12 2012-06-12 14:52:05 Re : appliquer texture aléatoire sur objets 3d importés

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

Re: appliquer texture aléatoire sur objets 3d importés



Colles ton code, je regarderai ça ce soir smile

Hors ligne

 

#13 2012-06-12 15:29:36 Re : appliquer texture aléatoire sur objets 3d importés

Ambre
nouveau membre
Date d'inscription: 2012-06-11
Messages: 9

Re: appliquer texture aléatoire sur objets 3d importés



import saito.objloader.*;

int r = random;
int random = (int)random(1O);
OBJModel[] model=new OBJModel[3] ;
PImage[] textureObjet=new PImage[3];
String[] listeObjet={"lowpoly_4bis_essai2.obj","lowpoly_1_essai.obj", "lowpoly_4bis_essai.obj"};
String[] listeTexture={"lowpoly_1.PNG","lowpoly_4bis2.PNG","lowpoly_4bis.PNG"};
float rotX, rotY;

void setup()
{
    size(800, 600, P3D);
    background(255);
    frameRate(30);
    for(int i=0;i<model.length;i++){
    model[i] = new OBJModel(this, listeObjet[i], "relative");
    model[i].enableDebug();

    model[i].scale(200);
    model[i].translateToCenter();
    textureObjet[i]=loadImage(listeTexture[i]);
    }
    stroke(255);
    noStroke();
}



void draw()
{
    lights();
    pushMatrix();
    translate(width/2, height/2, 0);
    rotateX(rotY);
    rotateY(rotX);

    for (int r = 0; r < 10; i++) {
    model[0].draw();
    }

    popMatrix();
}

boolean bTexture = true;
boolean bStroke = false;

void keyPressed()
{
    if(key == 't') {
        if(!bTexture) {
            model.enableTexture();
            bTexture = true;
        }
        else {
            model.disableTexture();
            bTexture = false;
        }
       
        if(key == 's') {
        if(!bStroke) {
            model.enableStroke();
            bStroke = true;
        }
        else {
            model.disableStroke();
            bStroke = false;
        }
       
         if(key == 'r') {
        r = (int)random(20);
         }
    }

void mouseDragged()
{
    rotX += (mouseX - pmouseX) * 0.01;
    rotY -= (mouseY - pmouseY) * 0.01;
}


J'crois que j'ai vraiment foutu le bordel...smile
J'ai essayé avec 3 fichiers, pour les 3 c'est leur texture propre. (supers noms de fichiers ^^)
Avant que j'essaye tout ça, le code fonctionnait mais n'affichait que le premier objet avec sa texture à chaque fois.
Merci merci smile

Dernière modification par Ambre (2012-06-12 15:31:12)

Hors ligne

 

#14 2012-06-12 15:36:55 Re : appliquer texture aléatoire sur objets 3d importés

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

Re: appliquer texture aléatoire sur objets 3d importés



Si tu peux joindre tes fichiers .obj et tes textures, ou les mettre a dispo sur un site de partage comme dl.free.fr
Je regarderais ça ce soir, après le boulot

Hors ligne

 

#15 2012-06-12 15:50:06 Re : appliquer texture aléatoire sur objets 3d importés

Ambre
nouveau membre
Date d'inscription: 2012-06-11
Messages: 9

Re: appliquer texture aléatoire sur objets 3d importés



Ok je t'envoie ça.

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2025