|
Librairie Scripts
|
|
Written by Garmin K
|
|
Un petit problème de rotation qui laisse perplexes ceux qui abordent pour la première fois les rotations dans les objets de plus d'une prim Si l'on modifie la rotation de la prim parent de l'objet, tout l'objet tourne ; il arrive qu'il ne faut faire tourner qu'une prim enfant, le reste de l'objet demeure immobile
//Soit une prim enfant ayant au départ une rotation : <90.0,295.0,0.0>, en degrès //On doit lui ajouter une rotation de <-59.7,31.95,17.65>, en degrès //Comment le faire sans faire pivoter tout l'objet, seule la prim enfant doit tourner vector vRot_Dep = <90.0, 295.0, 0.0>; // rotation de départ de la prim vector vRot_Add = <-59.7, 31.95, 17.65>; //rotation additionnelle default { state_entry() { //Donner à la prim enfant sa rotation de départ llSetLocalRot(llEuler2Rot(vRot_Dep * DEG_TO_RAD)); } touch_start(integer total_number) { //Relever la rotation actuelle vector vRot_Actuelle = llRot2Euler(llGetLocalRot()) * RAD_TO_DEG; //Additionner les rotations à faire //il y a différente manière de le faire //1) on additionne élément par élément vRot_Actuelle.x = vRot_Actuelle.x + vRot_Add.x; vRot_Actuelle.y = vRot_Actuelle.y + vRot_Add.y; vRot_Actuelle.z = vRot_Actuelle.z + vRot_Add.z; //2) On fait une addition de vecteur vRot_Actuelle = vRot_Actuelle + vRot_Add; //3) on incrémente le vecteur d'origine vRot_Actuelle += vRot_Add; //Version pro : incorporer l'addition à la mise en oeuvre de la rotation llSetLocalRot(llEuler2Rot((vRot_Actuelle + vRot_Add) * DEG_TO_RAD)); } }
|
Créer un premier cube, le teindre en rouge Créer un deuxième cube, le teindre en vert Sélectionner et lier les 2 cubes en sélectionnant le rouge en dernier Le cube rouge est la prim parent, la cube vert est la prim enfant Placer le script dans le contenu de la prim verte Donner une rotation quelconque à l'objet et cliquer A chaque click, la prim verte tourne indépendamment de la prim rouge
|