Les rotations sont souvent mal comprises où appréhender dans LSL.
L'art de faire compliqué quand on peut faire simple...
une fonction très simple presque inutile peut vous aidez..
Vous donnez une valeur à x,y,z
en degrés 0 .... 360
ou
en radians 0 to 2*PI
et cela vous donne un qad de rotation exigée par lsl dans ses fonctions de rotations.
rotation xyzRot(float x,float y,float z, integer type )
{
if (type == DEG)
return llEuler2Rot(< x, y, z >*DEG_TO_RAD);
else
return llEuler2Rot(< x, y, z >);
}
Insérer le script ci dessous dans une box et face à vous cliquez 1 seule fois ;-)
integer RAD = 0;
integer DEG = -1;
integer N;
rotation xyzRot(float x,float y,float z, integer type )
{
if (type == DEG)
return llEuler2Rot(< x, y, z >*DEG_TO_RAD);
else
return llEuler2Rot(< x, y, z >);
}
default
{
state_entry()
{
llSetRot( xyzRot( 10,30,45,DEG ));
llSetColor( <1.0,0.0,1.0>,0);
llSetColor( <1.0,1.0,1.0>,1);
llSetColor( <0.0,0.5,1.0>,2);
llSetColor( <0.0,1.0,0.0>,4);
llSetColor( <0.0,0.0,0.0>,5);
}
touch_start(integer total_number)
{
llSetRot( xyzRot( 0,0,0,RAD )); // ZERO //
llSleep (2);
llSetRot( xyzRot( PI/4,PI,PI/4,RAD) ); // PI/4 = 45 degrés
llSleep (2);
N=0;
while (N<360)
llSetRot( xyzRot( 0,N+=10,0, DEG) ); // Y rotate //
while (N>0)
llSetRot( xyzRot( N-=10,0,0, DEG) ); // -X rotate //
while (N<360)
llSetRot( xyzRot( 0,0,N+=10, DEG) ); // Z rotate //
}
}
Simple et démonstratif....