# llRot2Fwd

*LSL function*

```lsl
vector vector llRot2Fwd(rotation q);
```

- `rotation q`: Rotation to convert.

- Returns: `vector`
- Energy: 10

Computes the orientation of the `local x-axis` relative to the parent (i.e. the root prim or the world).

Returns a [vector](https://wiki.secondlife.com/wiki/vector) that is the forward vector defined by **q**, i.e. a unit vector pointing in the local positive X direction.

```lsl title="How to use" frame="terminal"
vector result = llRot2Fwd(ZERO_ROTATION);
```

## Specification

Mathematically equivalent to:

```lsl
ret = llVecNorm(<1., 0., 0.> * q);
```

If **q** is known to be a unit quaternion then it can be simplified as:

```lsl
ret = <1., 0., 0.> * q;
```

Keep in mind that object and agent rotations will always be unit quaternions. For example, `<1.0, 0.0, 0.0>`\*`llGetRot()` is about 25-30% faster than `llRot2Fwd(llGetRot())` depending on the VM used. If done often and at extremely fast rates, it can be advantageous to even save `<1.0, 0.0, 0.0>` to a local/global variable and reuse it.

## Examples

<details open>
<summary>Example 1</summary>

```lsl
// Move an object 5 metres forwards along its x axis, when touched, no matter how the object is oriented in world.
// Works for a root or child prim
default
{
    touch_start(integer total_number)
    {
        vector v = llRot2Fwd( llGetLocalRot() );
        llSetPos( llGetLocalPos() + v * 5 );
    }
}
```

</details>

## Notes

Can be useful to identify the orientation of the local `frontal-plane` of the prim, since its x-axis is always perpendicular to this local frontal plane.

## See also

### Functions

- [llRot2Left](/functions/llRot2Left/)
- [llRot2Up](/functions/llRot2Up/)
- [llRot2Axis](/functions/llRot2Axis/)
- [llRot2Angle](/functions/llRot2Angle/)

---

*Source: [LlRot2Fwd](https://wiki.secondlife.com/wiki/LlRot2Fwd) on the Second Life Wiki. Content from the Second Life Wiki article LlRot2Fwd (revision 1194479, 2015-01-22), CC BY-SA 3.0.*

---

From lsl.dev: https://lsl.dev/functions/llRot2Fwd/
