PDA

Voir la version complète : particules sur c4d art



parksto
11/10/2002, 15h25
c'est à quelques jours seulement de l'arrivé de c4d 8 que je trouve ça, mais bon, ça peux toujours aider quelqu'un...

dans c4d art, qui je le rappelle ne possede pas la faculté de faire de l'animation, les particules ne sont pas accessibles, je pensait même qu'elle n'étaient pas gérés.
c'est en téléchargeant un fichier sur internet que je me suis retrouvé avec un éméteur de particules dans ma scène.

il est en effet tout à fait possible d'utiliser les particules dans c4d art.

il suffit pour cela de créer un null object et d'y mettre cette expression coffee :


var part;

main(doc,op)
{
part=new (ParticleObject);
part->SetName("particules");
doc->InsertObject(part,op,NULL);
}

pour avoir des particules dans la scène, il faut donner une valeur négative à "commencer emission".

j'espère pouvoir aider certains avec ça

(il faut supprimer l'expression assez vite si vous ne voulez pas avoir des dizaines d'emetteurs) :wink:

Tengaal
11/10/2002, 15h47
Je n'ai pas la version ART mais pour cette expression on peut la contrôler d'avantage, par exemple la déclencher en cliquant sur un objet pour qu'elle produise un nombre N d' emetteurs de particules.

Créer un objet NULL appelé "bouton"
Créer un objet NULL appelé "expression" avec l'expression suivante:


var nb_emitters=50; //on met ici le nombre d'emetteurs de particules souhaité

var part;

main(doc,op)
{
var clic=GetActiveObject(doc); //regarde quel est l'objet actif
if (!clic) return; //si il n'y en a pas on quitte
if ("bouton"!=clic->GetName()) return; //si l'objet actif n'est pas "bouton" on quitte
doc->SetActiveObject(op); //désélectionne aussitôt le bouton

var n;
for (n=0;n<nb_emitters;n++)
{
part=new (ParticleObject);
part->SetName("particules_"+tostring(n)); //tostring(valeur) convertie une valeur en texte
doc->InsertObject(part,op,NULL);
}
doc->Message(MSG_UPDATE); //actualise la scène.
}

Il suffit donc de cliquer sur l'objet "bouton" pour exécuter l'expression qui va produire nb_emitters emetteurs de particules, évitant ainsi que l'expression tourne en permanence et produise des objets indéfiniment !

Renaud
11/10/2002, 15h51
L'astuce est sympa pour moi qui ai ART... mais comme la R8 devrait plus trop tarder (je croise les doigts), je risque de pas m'en servir tout de suite ;-)

Merci vachement beaucoup à tous les deux, c'est "meuh meuh" comme trouvaille ça :wink:

parksto
11/10/2002, 15h55
cette expression m'a pris deux minutes, juste pour tester. en general, un seul emetteur de particules suffit (personnellement 50 emetteurs, je ne sais pas ce que je vais en faire ! :D )

je me retrouve donc avec ce code :


var n=1;

var part;

main(doc,op)
{
var clic=GetActiveObject(doc); //regarde quel est l'objet actif
if (!clic) return; //si il n'y en a pas on quitte
if ("bouton"!=clic->GetName()) return; //si l'objet actif n'est pas "bouton" on quitte
doc->SetActiveObject(op); //désélectionne aussitôt le bouton


{
part=new (ParticleObject);
part->SetName("particules_"+tostring(n)); //tostring(valeur) convertie une valeur en texte
doc->InsertObject(part,op,NULL);
n++;
}
doc->Message(MSG_UPDATE); //actualise la scène.
}

parksto
11/10/2002, 15h58
L'astuce est sympa pour moi qui ai ART... mais comme la R8 devrait plus trop tarder (je croise les doigts), je risque de pas m'en servir tout de suite ;-)

moi aussi j'attend avec impatience. :roll:
mais bon, pour ce qui n'auront pas la mise à jour tout de suite, ça peut être utile.

Tengaal
11/10/2002, 16h01
Si tu veux produire seulement un emetteur à chaque fois tu peux enlever

"var n=1;"
egalement le "+tostring(n)" car c4d mettera lui-même un chiffre si besoin.
et enfin "n++;"

Il faut prendre l'habitude de faire du ménage dans les scripts pour ne conserver que le stricte nécessaire. Pour les petits programmes ce n'est pas gênant mais pour de grosses expressions avec beaucoup de code ça peut vite devenir le bordel ! :wink: