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 ?
Merci beaucoup.
Ambre
Hors ligne
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
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 )
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
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
Dernière modification par Ambre (2012-06-11 21:55:19)
Hors ligne
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
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
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
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
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
Ok d'accord. J'vais essayer ça.
Merci encore! C'est pas toujours évident
Hors ligne
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 mais je ne saisis pas comment on le code... j'fais plein d'erreurs :S
Hors ligne
Colles ton code, je regarderai ça ce soir
Hors ligne
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...
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
Dernière modification par Ambre (2012-06-12 15:31:12)
Hors ligne
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
Ok je t'envoie ça.
Hors ligne
Pages: 1