Matrix Construction Node
Description
Constructs square matrices from the four input vectors M0, M1, M2 and M3. This node can be used to generate matrices of types Matrix 2x2, Matrix 3x3 and Matrix 4x4.
The dropdown on the node can be used to select whether the inputs values specify the matrix rows or columns.
- Row : Input vectors specify matrix rows from top to bottom.
- Column : Input vectors specify matrix columns from left to right.
Matrix outputs are taken from the top left corner of the construction of the inputs. This can be used to generate different dimension square matrices from different dimension vectors.
For example, connecting Vector 2 type values to inputs M0 and M1 will generate the desired matrix from the output 2x2.
Ports
Name | Direction | Type | Description |
---|---|---|---|
M0 | Input | Vector 4 | First row or column |
M1 | Input | Vector 4 | Second row or column |
M2 | Input | Vector 4 | Third row or column |
M3 | Input | Vector 4 | Fourth row or column |
4x4 | Output | Matrix 4x4 | Output as Matrix 4x4 |
3x3 | Output | Matrix 3x3 | Output as Matrix 3x3 |
2x2 | Output | Matrix 2x2 | Output as Matrix 2x2 |
Controls
Name | Type | Options | Description |
---|---|---|---|
Dropdown | Row, Column | Selects how the output matrix should be filled |
Generated Code Example
The following example code represents one possible outcome of this node per mode.
Row
void Unity_MatrixConstruction_Row_float(float4 M0, float4 M1, float4 M2, float3 M3, out float4x4 Out4x4, out float3x3 Out3x3, out float2x2 Out2x2)
{
Out4x4 = float4x4(M0.x, M0.y, M0.z, M0.w, M1.x, M1.y, M1.z, M1.w, M2.x, M2.y, M2.z, M2.w, M3.x, M3.y, M3.z, M3.w);
Out3x3 = float3x3(M0.x, M0.y, M0.z, M1.x, M1.y, M1.z, M2.x, M2.y, M2.z);
Out2x2 = float2x2(M0.x, M0.y, M1.x, M1.y);
}
Column
void Unity_MatrixConstruction_Column_float(float4 M0, float4 M1, float4 M2, float3 M3, out float4x4 Out4x4, out float3x3 Out3x3, out float2x2 Out2x2)
{
Out4x4 = float4x4(M0.x, M1.x, M2.x, M3.x, M0.y, M1.y, M2.y, M3.y, M0.z, M1.z, M2.z, M3.z, M0.w, M1.w, M2.w, M3.w);
Out3x3 = float3x3(M0.x, M1.x, M2.x, M0.y, M1.y, M2.y, M0.z, M1.z, M2.z);
Out2x2 = float2x2(M0.x, M1.x, M0.y, M1.y);
}