58 lines
1.6 KiB
Markdown
58 lines
1.6 KiB
Markdown
|
|
# Rotate Node
|
||
|
|
|
||
|
|
## Description
|
||
|
|
|
||
|
|
Rotates value of input **UV** around a reference point defined by input **Center** by the amount of input **Rotation**. The unit for rotation angle can be selected by the parameter **Unit**.
|
||
|
|
|
||
|
|
## Ports
|
||
|
|
|
||
|
|
| Name | Direction | Type | Binding | Description |
|
||
|
|
|:------------ |:-------------|:-----|:---|:---|
|
||
|
|
| UV | Input | Vector 2 | UV | Input UV value |
|
||
|
|
| Center | Input | Vector 2 | None | Center point to rotate around |
|
||
|
|
| Rotation | Input | Float | None | Amount of rotation to apply |
|
||
|
|
| Out | Output | Vector 2 | None | Output UV value |
|
||
|
|
|
||
|
|
## Controls
|
||
|
|
|
||
|
|
| Name | Type | Options | Description |
|
||
|
|
|:------------ |:-------------|:-----|:---|
|
||
|
|
| Unit | Dropdown | Radians, Degrees | Switches the unit for input **Rotation** |
|
||
|
|
|
||
|
|
## Generated Code Example
|
||
|
|
|
||
|
|
The following example code represents one possible outcome of this node per **Unit** mode.
|
||
|
|
|
||
|
|
**Radians**
|
||
|
|
|
||
|
|
```
|
||
|
|
void Unity_Rotate_Radians_float(float2 UV, float2 Center, float Rotation, out float2 Out)
|
||
|
|
{
|
||
|
|
UV -= Center;
|
||
|
|
float s, c;
|
||
|
|
sincos(Rotation, s, c);
|
||
|
|
float3 r3 = float(-s, c, s);
|
||
|
|
float2 r1;
|
||
|
|
r1.y = dot(UV, r3.xy);
|
||
|
|
r1.x = dot(UV, r3.yz);
|
||
|
|
Out = r1 + Center;
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Degrees**
|
||
|
|
|
||
|
|
```
|
||
|
|
void Unity_Rotate_Degrees_float(float2 UV, float2 Center, float Rotation, out float2 Out)
|
||
|
|
{
|
||
|
|
Rotation = Rotation * (3.1415926f/180.0f);
|
||
|
|
UV -= Center;
|
||
|
|
float s, c;
|
||
|
|
sincos(Rotation, s, c);
|
||
|
|
float3 r3 = float(-s, c, s);
|
||
|
|
float2 r1;
|
||
|
|
r1.y = dot(UV, r3.xy);
|
||
|
|
r1.x = dot(UV, r3.yz);
|
||
|
|
Out = r1 + Center;
|
||
|
|
}
|
||
|
|
```
|