diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2019-05-27 17:42:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-27 17:42:43 +0200 |
commit | 7487d2f8521d895df2f16b36d21992f8fde99f75 (patch) | |
tree | 11c3a0405e0eb249b77e238d82e34abd660debb8 /modules/mono/glue/Managed/Files/Basis.cs | |
parent | 9f6eb3882c933ea4049e110f2aed333f692d2d41 (diff) | |
parent | 9ff708f0087531c18d7d13cbc24751fe88f2dfa4 (diff) |
Merge pull request #28957 from aaronfranke/basis-optimize
Optimize Basis constructor for Axis Angle
Diffstat (limited to 'modules/mono/glue/Managed/Files/Basis.cs')
-rw-r--r-- | modules/mono/glue/Managed/Files/Basis.cs | 44 |
1 files changed, 21 insertions, 23 deletions
diff --git a/modules/mono/glue/Managed/Files/Basis.cs b/modules/mono/glue/Managed/Files/Basis.cs index d02dbe545f..9cc31a0557 100644 --- a/modules/mono/glue/Managed/Files/Basis.cs +++ b/modules/mono/glue/Managed/Files/Basis.cs @@ -575,31 +575,29 @@ namespace Godot public Basis(Vector3 axis, real_t phi) { - var axis_sq = new Vector3(axis.x * axis.x, axis.y * axis.y, axis.z * axis.z); - + Vector3 axisSq = new Vector3(axis.x * axis.x, axis.y * axis.y, axis.z * axis.z); real_t cosine = Mathf.Cos(phi); - real_t sine = Mathf.Sin(phi); - - Row0 = new Vector3 - ( - axis_sq.x + cosine * (1.0f - axis_sq.x), - axis.x * axis.y * (1.0f - cosine) - axis.z * sine, - axis.z * axis.x * (1.0f - cosine) + axis.y * sine - ); + Row0.x = axisSq.x + cosine * (1.0f - axisSq.x); + Row1.y = axisSq.y + cosine * (1.0f - axisSq.y); + Row2.z = axisSq.z + cosine * (1.0f - axisSq.z); - Row1 = new Vector3 - ( - axis.x * axis.y * (1.0f - cosine) + axis.z * sine, - axis_sq.y + cosine * (1.0f - axis_sq.y), - axis.y * axis.z * (1.0f - cosine) - axis.x * sine - ); - - Row2 = new Vector3 - ( - axis.z * axis.x * (1.0f - cosine) - axis.y * sine, - axis.y * axis.z * (1.0f - cosine) + axis.x * sine, - axis_sq.z + cosine * (1.0f - axis_sq.z) - ); + real_t sine = Mathf.Sin(phi); + real_t t = 1.0f - cosine; + + real_t xyzt = axis.x * axis.y * t; + real_t zyxs = axis.z * sine; + Row0.y = xyzt - zyxs; + Row1.x = xyzt + zyxs; + + xyzt = axis.x * axis.z * t; + zyxs = axis.y * sine; + Row0.z = xyzt + zyxs; + Row2.x = xyzt - zyxs; + + xyzt = axis.y * axis.z * t; + zyxs = axis.x * sine; + Row1.z = xyzt - zyxs; + Row2.y = xyzt + zyxs; } public Basis(Vector3 column0, Vector3 column1, Vector3 column2) |