PDA

Voir la version complète : le premier wip en COFFEE!!!



Floby
16/12/2003, 19h30
bonjour les gars!!

je m'interesse de près au langage COFFEE en ce moment et je voulais faire un truc serieux, inutile mais serieux...

je veux ecrire un expression à moi tout seul comme un grand pour mettre en application ce que j'ai appris et, je l'espere, apprendre encore plus! mon objectif est de faire ceci:

avec une sphère, une matière et une expression attachée à la sphère je veux que, quand je bouge ma sphère vers +X, elle devient de plus en plus rouge; vers -X pareil mais avec le vert; vers +Z toujours pareil mais cette fois-ci avec le bleu et vers -Z avec l'intensité (et quand elle est à zéro et bah je verrai quelle couleur je veux).
à cela on ajoute une remise à l'echelle, toujours progressive, sur l'axe des Y...

bon voila, et le principe c'est que ceux qui s'y connaissent en programmation, me disent ou j'ai des fautes, des petits trucs par-ci par-là et ainsi de suite.
j'espere vous transmettre le premier essai d'ici le moins longtemps possible et je compte sur vous pour m'aider!!!

en vous remerciant tous d'avance, FLOBY


(aller let's go!! :bounce: :wip: )

Floby
16/12/2003, 19h47
voila, après 5 minutes de travail je crois deja que j'ai des fautes. j'ai eu le temps de definir les variables dont j'aurais besoin...

mon expression:

main (doc,op)

{
var position = op->GetPosition();
var matiere = doc->GetFirstMaterial();
var matierecont = matiere->GetContainer();
var canal = matiere->GetChannel(CHANNEL_COLOR);
}

darky
16/12/2003, 20h20
vas y floby!
Je ne connais pas les cofees vu que j'ai xpresso mais je connais d'autres languages. Ce que tu as fais a l'air correct (j'ai un petit doute mais je suis pas sur du tout sur la derniere ligne) mais t'es pas obligé de m'ecoutté, puisque j'ai dis que je connaiscais pas trop :lol:

Floby
16/12/2003, 20h23
oui c'est sur cette ligne là que j'avais un doute, il faut que je regarde la doc de tengaal...

désolé pour l'instant, je peux plus continuer, je continuerai demain...

spigeon29
17/12/2003, 14h07
Super, enfin du décodage du Coffee. Moi aussi ca m'interesse mais je trouve que la doc sur internet c'est pas vraiment le top. A quand une vraie doc pour Coffee ?

Sinon tu peux le faire aussi en Xpresso ce qui est plus simple, mais bon.

Mettre les mains dans le cambouis c'est aussi bien.

Courage

Floby
17/12/2003, 14h15
tu as regardé la doc de Tengaal (http://www.tengaal.com)? moi je la trouve hyper bien, en plus j'ai tout compris!

spigeon29
17/12/2003, 14h27
oui, mais je n'ai pas fait la méthode encore. Je m'amuse plutôt avec Xpresso. Mais coffee + Xpresso, c'est du tonnerre.

Steph3D ::.
17/12/2003, 14h37
C'est du bon boulot la doc de Tengaal :-)

On peu aussi concevoir un principe en xpresso pour comprendre le truc, et essayé de le refaire en COFFEE après, ça aide parfois

Mais surtout ce qui est bien c'est de commencé à faire des trucs en xpresso pour comprendre les principes de la prog de C4d, après c'est plus simple de passer au COFFEE

Et puis mélanger apres du COFFEE avec XPresso, c'est de la bombe ! :poucehaut:

Floby
17/12/2003, 14h44
oui j'ai vu ce que tu fais steph, c'est super.

mais pas d'Xpresso pour moi helas, CE6 oblige alors je passe direct au dur de dur, par contre j'ai regardé le tut Xpresso sur la roue qui tourne, ca a l'air d'être le même principe de calcul que ce que je veux faire... je vais m'amuser comme un petit fou!

Steph3D ::.
17/12/2003, 14h55
Pour la roue en COFFEE pas besoin de te prendre la tete à comprendre comment l'adapté de l'exemple xpresso, Tabou avait déjà ecrit un petit code cool en COFFEE et plutôt simple à comprendre


/* Cette expression fait tourner automatiquement la roue sur laquelle elle est placée
en fonction du déplacement de l'objet chariot.
L'expression ne prend en compte que les déplacements sur l'axe Z, l'axe X est ignoré.
Pour un déplacement sur l'axe X il faut remplacer pos=pos.z par pos=pos.x

Pour adapter cette expression à un véhicule déjà modélisé il suffit de la placer
sur chacune des roues, ensuite il faut donner à l'objet radius le même rayon externe
que celui des roues et finalement remplacer "chariot" par le nom du véhicule.

tabou août 2002 http://tabou.free.fr/ tabou@free.fr
*/


main(doc,op)
{
var pos=doc->FindObject("chariot")->GetPosition();if(!pos)return;
pos=pos.z;

var rayon=doc->FindObject("radius")->GetContainer()->GetData(PRIM_TUBE_ORAD);if(!rayon)return;
var diam=rayon*2;
var circ=diam*PI;

var rot=-(Radians(pos/circ)*360);
var rotz=vector(0,rot,0);
op->SetRotation(rotz);

}

La page du site http://tabou.free.fr/c4d/exp/exp.html

Floby
19/12/2003, 00h14
merci beaucoup, mais à ce moment là sir je fais un virage, c'est dans les gravier tout de suite!! :lol: les roues tournent dans le vide!
j'avais trouvé une expression ici dans le rubrique qui prenais en compte les rotation de l'objet, je vais essayer de comprendre ça..

mais bon, j'en ai pas vraiment besoin maintenant et je dois trouver la bonne organisation dans mon expression à moi! Au boulot, que diable!

Floby
21/12/2003, 15h45
alors ok!

je 'ai pas eu beaucoup de temps cette semaine because contrôle communs mais là c'est les vacances ouais!

donc j'ai fait ça:


main (op,doc)

{
var position=op->GetPosition();
var matiere=doc->GetFirstMaterial();
var canal=matiere->GetChannel(CHANNEL_COLOR);
var couleur=canal->GetContainer();

if(position.x>5)
{
couleur->SetData(CH_COLOR,vector(position.x/300,NULL,NULL));
canal->SetContainer(couleur);
matiere->Update();
}
}

mais le seul problème c'est que ça marche pas, une âme charitable aurait-elle l'amabilité de m'en dire le pourquoi? je parle bien hein?

merci d'avance! :wink:

Floby
21/12/2003, 16h10
une rectification s'impose...

bon, vous essairez d'oublier vite que j'avais pas appliqué la texture à ma sphère. :oops: et je me dit comme ça aussi que peut que le COFFEE n'accepte pas les NULL dans les vector, et surtout que pourquoi que qu'je m'complique la tâche à mettre des ifs partout alors que je peux tout gérer dans le même coup (sauf pour l'échelle)

je me complique partout moi :D

mais si vous voyez que la faute viens d'autre part hein, le gardez surtout pas pour vous! parce que même en apliquant la texture il me fait que mettre le rouge à zero...

Floby
22/12/2003, 19h34
hum...
personne ne sait? parce que là je bloque vraiment! parce que mon plan était construit autour de ça...

Steph3D ::.
22/12/2003, 19h50
main (op,doc) = main (doc,op)
Déjà tu as inversé le nom des variables en haut, ça fausse tout le script
Sur le coup j'ai cru que ton Tag COFFEE etait maudit, par ce que je n'arrivai à rien faire marcher dedans ;-)

et NULL ça ne marche pas, mets de zéros à la place
Sinon ton script marche :poucehaut:


main(doc,op)
{
var position=op->GetPosition();
var matiere=doc->GetFirstMaterial();
var canal=matiere->GetChannel(CHANNEL_COLOR);
var couleur=canal->GetContainer();

if(position.x>5)
{
couleur->SetData(CH_COLOR,vector(position.x/300,0,0));
canal->SetContainer(couleur);
matiere->Update();
}
}

Floby
22/12/2003, 20h06
ça c'est parce que je l'ai fait dans un document à part pour pas être obligé de démarrer c4d a chaque fois et de pouvoir travailler sur un autre ordi. pour les NULL il me semblait bie que ça venait de là, et je te remercie de m'avoir conforté dans cette certitude, en fait je pensais que si je mettais des 0 il mettrai à zero le bleu et le vert... mais bon de toute façon je vais faire tout en un. merci encore!

et mon wip etrenne sa deuxieme page!

Floby
23/12/2003, 19h41
merci beaucoup steph3D, ça marche comme sur des roulettes!!!

mais, je suis parti en freestyle pour les valeurs négatives et ça donne ça:


main (doc,op)

{
var position=op->GetPosition();
var matiere=doc->GetFirstMaterial();
var canal=matiere->GetChannel(CHANNEL_COLOR);
var couleur=canal->GetContainer();

if((position.x>5)&&(position.z>5))
{
couleur->SetData(CH_COLOR,vector(position.x/600,0,position.z/600));
canal->SetContainer(couleur);
matiere->Update();
}

if((position.x<-5)&&(position.z<-5))
{
couleur->SetData(CH_COLOR,vector(0,position.x*-1/600,0);|
couleur->SetData(CH_BRIGHTNESS,position.z*-1/600);
canal->SetContainer(couleur);
matiere->Update();
}
}

naturellement ça ne marche pas :D et je pensais que vous pouviez m'aider encore un fois, il me mets un "syntax error" au niveau du truc rouge dans mon message...

j'ai bien avancé quand même, je n'ai plus qu'a faire l'echelle sur l'axe des Y... merci!

Tengaal
24/12/2003, 12h07
Il te manque une parenthèse fermée à la fin...

Floby
24/12/2003, 13h08
:oops: merci tengaal, j'ai honte :oops:

en tout cas je suis content que tu sois passé par mon wip :D

bon j'ai une erreur dans la logique, je pense que je vais utiliser l'instruction switch...