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
Messages
Giftofvision - Sneakers search engine | adidas chunky sneakers white gold women jeans size
key k = llGetLinkKey(num_prim);
rotation localRot = llList2Rot(llGetObjectDetails(k,[OBJECT_ROT]),0);
avec ça on a la rotation d'un prim enfant connaissant son numéro. a partir de laquelle on peut calculer une nouvelle rotation (il vaut mieux bosser avec des rotations plutôt que des vecteurs, a moins de réellement vouloir des effets indésirables ^^), a combiner en général avec la rotation du prim parent, je ne m'étend pas plus sur le sujet, la littérature sur les rotations 3d est déjà assez lourde ^^
j'ai un petit doute sur les methodes d'addition des rotations… c'est vrai qu'il y a de quoi avoir des migraines. Je posterai + tard une version perso pour avoir un llGetChildRot(numLink)…
(en fait je teste le forum du site que je viens de découvrir :)