Ok donc tu penses que mon objet est systématiquement "appelé", "recalculé" etc... ce qui sollicite continuellement ma machine!
En clair comment remédier à cela?
Hors ligne
tomaok a écrit:
En clair comment remédier à cela?
En sortant le chargement de l'objet de la fonction, c'est à dire en plaçant les lignes suivantes en haut du script
model = new OBJModel(this, "alien.obj", "relative", TRIANGLES);
model.enableDebug();
Comme ça l'objet est chargé quelquesoit l'état du marqueur, mais n'est affiché que lorsque le marqueur est actif.
Peut-être que ça ne marchera pas comme ça, dans ce cas essaye de déclarer l'objet en haut de script et de le charger dans le setup()
Hors ligne
Impeccable ça marche comme sur des roulettes! La vidéo est fluide et ma machine ne mouline plus.
Voici le code actualisé!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Hors ligne
Après quelques bidouilles j'ai enfin pu caler mon objet sur le marqueur!!
Le code est désormais le suivant >>
Hors ligne
Prochaine étape déclarer un second objet 3D de type wavefront (.obj) lié avec le second marqueur...
Hors ligne
2 marqueurs, 2 modèles! ^^!... Je pense qu'on peut en ajouter pas mal, mais j'ai pas encore testé!
et le code...
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Hors ligne
Cool ! merci d'ouvrir ton code.
On peut en effet mettre plusieurs marqueurs simultanément...il me semble que l'on peut également mettre plusieurs fois le même. On le voit ici (version java / Eclipse / nyartoolkit :
http://nyatla.jp/nyartoolkit/wiki/index … ava_02.jpg
+++
Hors ligne
Depuis le temps que je cherchais une solution satisfaisante, je suis bien content de la diffuser!!
Voici le code que j'ai un peu nettoyé... Je vais chercher à intervenir sur la position des objets, la lumière... et les animer... Mais là je pense que c'est une autre affaire!
Soit processing est capable de lire une animation liée à un objet wavefront (réalisée depuis blender par exemple), soit il faut tout animer dans le code, cela risque d'être très fastidieux et moche!
En ce qui concerne ta remarque oyster_twiter, on peut disposer plusieurs marqueurs identiques mais dans le cas présent il choisira celui qui sera le plus visible. donc il faut trouver une solution pour appeler autant d'objet que de marqueur, peut être une boucle §%#?!
à +++
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Hors ligne
Chers tous ^^!
Je reviens vers vous avec une(des?) nouvelle(s) question(s).
J'ai poursuivi quelques recherches concernant la réalité augmentée incluant des évènements sonores.
Autrement dit apparition d'éléments 3D + son. Seul problème l'extrait sonore tourne en boucle.
Donc comment faire pour que le son se déclenche une seule fois après identification du marqueur, puis se redéclenche après nouvelle apparition du marqueur?
J'ai intégré la librairie audio:
// Librairie audio
import ddf.minim.*;
Minim minim;
AudioSnippet pouet;
Puis inséré un son .wav appelé en même temps que l'objet 3D.
// objet cube
void displayCube(MultiARToolKit _a) {
fill(0,255,0);
translate(0,0,40);
box(80,80,80);
// source audio
minim = new Minim(this);
pouet = minim.loadSnippet("pouet.wav");
pouet.play();}
void stop(){
pouet.close();
minim.stop();
super.stop();
Merci pour votre aide!!
>>>>>>>>>>> ci-dessous le code complet!
Hors ligne
Salut tomaok,
Dans un premier temps je te conseilles de déclarer et d'instancier ton instance minim ainsi que ton son dans le setup. Tu as besoin de ne le faire qu'une seule fois au début du lancement de ton programme donc setup() est là pour ça :
void setup(){ minim = new Minim(this); pouet = minim.loadSnippet("pouet.wav"); ... }
Pour faire ce dont tu as envie (déclencher ton son une seule fois à chaque apparition de ton marqueur) je procéderais avec une variable de décompte.
int decompte = 0;
et après tu vérifies si la condition est requise pour jouer ton son :
if (decompte == 0){
pouet.play();
decompte++;
}
La condition devrait être vérifiée une seule fois quand decompte == 0 après il incrémente et on sort de la condition.
Il ne faut pas oublier par la suite à la réinitialiser quand ton marqueur n'est plus détecté par exemple, pour pouvoir redéclencher à nouveau...
+++
Hors ligne
Ok le son se déclenche une fois... puis plus rien... J'ai tenté d'introduire la variable de décompte (condition "if") si j'ai bien compris, mais c'est un peu confus pour moi je vais me replonger dans mes bouquins ... Mon but étant de créer des boutons sonores, un ersatz d'interface.
Merci ^^!
Hors ligne
Je pense qu'il faut rebobiner ton sample à chaque fois après l'avoir joué.
pouet.rewind();
Il faut peut-être aussi le mette en pause pour qu'il ne tourne tout le temps en boucle avec
pouet.pause();
A toi de bricoler maintenant
Hors ligne
J'ai un peut tout essayé... J'arrive à un résultat plutôt curieux...
L'objet 3D apparait après détection du marqueur, le son se déclenche aussi, puis se répète de façon aléatoire sans que je puisse en déterminer la logique.
Une 1/2 victoire en somme ^^!
Hors ligne
Il ya peut-être des "mini" interruptions de détection de marqueur ( c'est le cas avec les fiducials de reactivision) qui ne se voient pas à l'image (< à 0.040s) mais évidemment s'entendent puisque la fonction est réinitialisée . Introduire une notion de temps minimum ?
Hors ligne
yo! je prends le truc en cours, il te faut ce genre de pseudo algo:
AudioPlayer player;
boolean premièreFrame= true;
int timer
...
void setup(){
player= minim.loadFile(......);
...
}
void draw(){
if(marqueurDétecté){
timer=0;
player.play();
diplayObj();
}
else{
timer++;
if(timer>50){
player.pause();
//player.rewind();//pour rejouer du départ le son au prochain affichage
}
}
}
je suis assez clair?
j'essaierai de suivre un peu plus (j'avais déjà fait fonctionner ObjLoader et MultiArToolKit y'a un an... )
Dernière modification par Makio135 (2011-07-27 14:26:36)
Hors ligne