Skip to content
lsl.devlsl.devLSL Dev

llSetRot

function
Function syntax
llSetRot(
  1. rotation rot// Target rotation.
);
Delay
0.2 s
Energy
10

Sets the rotation of the prim to rot. If in a child prim, rot is treated as root-relative; if in the root prim of a non-physical object, rotates the entire object.

Sets the rotation of the prim to rot.

How to use
llSetRot(ZERO_ROTATION);
  • If the prim is attached, then this function offsets the rotation by the avatar’s rotation.
  • If the prim is not the root prim it is offset by the root’s rotation.
  • If you are trying to set the rotation of a child prim relative to the root prim then divide the rotation by the root rotation.
  • If you are trying to set the rotation of a child prim to a global rotation then you need to divide the global rotation by the root rotation twice.
  • It is better to use llSetLocalRot to set the rotation of child prims, even if you are setting it to a global rotation (just divide by the root rotation in that case).
  • Alternatively see the Useful Snippets for generalized workarounds that work with llSetPrimitiveParams, llSetLinkPrimitiveParams, and llSetLinkPrimitiveParamsFast
  • For small rotation changes, there is an update threshold depending on the time duration between changes. It does not appear to be limited to the 6deg rule any longer.
  • For “static objects” (type of pathfinding), the script fails with the error in debug channel:
  • “Unable to set prim rotation: object contributes to the navmesh.”
Drop this script in the root prim of an object to have it rotate in 1 degree increments. Note that it won’t work on child prims if the root is rotated.
11 collapsed lines
rotation rot_xyzq;
default
{
state_entry()
{
vector xyz_angles = <0,1.0,0>; // This is to define a 1 degree change
vector angles_in_radians = xyz_angles*DEG_TO_RAD; // Change to Radians
rot_xyzq = llEuler2Rot(angles_in_radians); // Change to a Rotation
}
touch_start(integer s)
{
llSetRot(llGetRot()*rot_xyzq); //Do the Rotation...
}
}
Drop this one in a child prim to have it rotate around the world’s Y axis in 1 degree increments. It won’t work in the root if it is rotated.
11 collapsed lines
rotation rot_xyzq;
default
{
state_entry()
{
vector xyz_angles = <0,1.0,0>; // This is to define a 1 degree change
vector angles_in_radians = xyz_angles*DEG_TO_RAD; // Change to Radians
rot_xyzq = llEuler2Rot(angles_in_radians); // Change to a Rotation
}
touch_start(integer s)
{
llSetRot(llGetRot()*rot_xyzq/llGetRootRotation()/llGetRootRotation()); //Do the Rotation...
}
}
//-- These correctly set a global rotation for the root prim in all scenarios
llSetLocalRot( rot )
llSetPrimitiveParams( [PRIM_ROT_LOCAL, rot] )
//-- These correctly set a global rotation for a child prim in all scenarios
llSetLocalRot( rot / llGetRootRotation() )
llSetPrimitiveParams( [PRIM_ROT_LOCAL, rot / llGetRootRotation() ] )

From the issue templates included by the wiki article:

  • SVC-93 (bug): llSetRot and llSetPrimitiveParams (using PRIM_ROTATION) incorrectly implemented for child prims.
Original wiki source

Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.

From the Second Life Wiki

Community documentation adapted from LlSetRot, by Linden Research, Inc. and contributing residents.View contributors and history.

Built from these wiki pages, as imported:

Licensed under CC BY-SA 3.0. Last wiki edit: .Formatting and links have been adapted for this site; API metadata follows the LSL definitions.