Qui est online

Nous avons 137 invités en ligne


Problème de rotation
Note des utilisateurs: / 0
MauvaisTrès bien 
Librairie Scripts
Écrit par 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

 

 

Messages 

 
#2 Barbidule 2009-04-28 16:32 bon, ben voila un truc que je trouve utile avec les rotations de prim enfant :
key k = llGetLinkKey(num_prim);
rotation localRot = llList2Rot(llGetObjectDet ails(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 ^^
Citer
 
 
#1 Barbidule 2009-04-22 13:36 hello,
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 :)
Citer
 

Ajouter un Message

Si vous ne voyez pas vos messages c est que vous n êtes pas enregistré sur Avatars-3d en tant que membre. Ils seront examinés par un administrateur avant d être publié! Si vous désirez publier rapidement vos messages enregistrez vous ici

Code de sécurité
Rafraîchir