PDA

Voir la version complète : Symétrie de lumières



Tengaal
22/09/2002, 20h23
Suite à une remarque judicieuse concernant l'impossibilité de faire une symétrie avec un objet lumière, Parksto s'est lancé dans le code et nous a amené une bonne petite expression à laquelle, j'ai fait quelques petites remarques, je vous livre donc ici l'expression modifiée:
Ce code est bien sûr créé à la base par Parksto qui j'espère acceptera ces petits correctifs ! :wink:
La "symétrique" de la lumière est une instance ce qui permet de modifier la lumière originale avec une copie qui utilise les mêmes paramètres, j'ai également ajouté les symétries de rotations pour prendre en charge le cas des spots et lumières directionnelles...

var symetrie, lumiere, copie, poslumiere, posymetrie, distance, final, copielampe, containerlampe;
var rotlumiere, rotfinal;

main(doc,op)
{

//symetrie = "x";
//symetrie = "y";
symetrie = "z";

copie=doc->FindObject("lampe copie");
lumiere = op->GetDown();
if (!lumiere) return; //si il n'y a pas d'objet enfant on quitte
if (!instanceof(lumiere, LightObject)) return; //si l'enfant n'est pas une lumière on quitte
poslumiere = lumiere->GetPosition();
rotlumiere=lumiere->GetRotation();
posymetrie = op->GetPosition();

if (symetrie=="x") {
distance = poslumiere.x - posymetrie.x;
final=vector (posymetrie.x-distance,poslumiere.y,poslumiere.z);
rotfinal=rotlumiere;
rotfinal.x=-rotfinal.x;
rotfinal.z=-rotfinal.z;
}
if (symetrie=="y") {
distance = poslumiere.y - posymetrie.y;
final=vector (poslumiere.x,posymetrie.y-distance,poslumiere.z);
rotfinal=rotlumiere;
rotfinal.z=-rotfinal.z;
rotfinal.y=-rotfinal.y;
}
if (symetrie=="z") {
distance = poslumiere.z - posymetrie.z;
final=vector (poslumiere.x,poslumiere.y,posymetrie.z-distance);
rotfinal=rotlumiere;
rotfinal.x=-rotfinal.x+Radians(180);
rotfinal.z=-rotfinal.z;
}

if (!copie)
{
copie=new(InstanceObject); //on créé une instance pour notre lumiere
copie->SetName("lampe copie");
var container=copie->GetContainer(); //on accède aux paramètre de cet objet Instance
container->SetData(INSTANCEOBJECT_SOURCE,lumiere->GetName()); //l'instance pointe sur le nom de la lumiere
doc->InsertObject(copie,op,lumiere);
copie->SetContainer(container);
}
copie->SetPosition(final);
copie->SetRotation(rotfinal);

doc->Message(MSG_UPDATE); //actualisation des modifications du document
}

Cette expression doit être placée sur un objet servant de point de symétrie, dans lequel on glisse une lumière, celle-ci sera dupliquée par rapport à un axe définit dans le code (symetrie="z");
Merci Parsto ! :D

izostar
22/09/2002, 23h09
C'est du coffee ça ?
C'est un mélange de C et d'orienté objet ?

En tout cas, pour quelqu'un qui a l'habitude de programmer (du php entre autre pour mon cas), ça n'a pas l'air trop difficile à comprendre et à mettre en oeuvre...

Tengaal, ça serait cool un petit dossier avec les bases de coffee, ça me donnerait du courage et certainement à d'autres pour se lancer :)

Remarque, xPresso arrive... :roll:

Tengaal
23/09/2002, 00h40
J'avais déjà commencé des doc de base du COFFEE en PDF, c'est sur mon site dans "Astuces 3D" puis dans "Programmation".

Ce langage est extrêmemnt proche du C++, il est orienté objet avec des classes et des méthodes, c'est vraiment simplissime ! :wink:

lenogre
23/09/2002, 00h52
Merci les amis mais toutes ces lignes de code, j'en fais quoi maintenant ? Y a un lien pour télécharger l'expression ?

parksto
23/09/2002, 08h11
Merci les amis mais toutes ces lignes de code, j'en fais quoi maintenant ? Y a un lien pour télécharger l'expression ?

il suffit juste de créer un tag "expression COFFEE" sur un object neutre et de copier/coller le code ci-dessus. 8)


En tout cas, pour quelqu'un qui a l'habitude de programmer (du php entre autre pour mon cas), ça n'a pas l'air trop difficile à comprendre et à mettre en oeuvre...

ben moi, je programme en php aussi, au depart. quand j'ai vu la similitude, je ma suis dis que je pourrai essayer moi aussi, non mais ! :lol:


Merci Parsto !

merci à toi pour ces corrections, moi j'apprend, toi t'es le prof :D

Stéphane HENRY
23/09/2002, 08h39
Salut

Magistral ! bravo

Je vois que l'ont peut en vraque déclarer les variables
var toto, titi, tutu, etc ...

désormais ont peut le rajouter sur le Tutorial de Tengal !

Stéphane