25 float trace = matrix(0, 0) + matrix(1, 1) + matrix(2, 2);
27 float s = 0.5f / sqrt(trace + 1.0f);
29 x = (matrix(2, 1) - matrix(1, 2)) * s;
30 y = (matrix(0, 2) - matrix(2, 0)) * s;
31 z = (matrix(1, 0) - matrix(0, 1)) * s;
33 if (matrix(0, 0) > matrix(1, 1) && matrix(0, 0) > matrix(2, 2)) {
34 float s = 2.0f * sqrt(1.0f + matrix(0, 0) - matrix(1, 1) - matrix(2, 2));
35 w = (matrix(2, 1) - matrix(1, 2)) / s;
37 y = (matrix(0, 1) + matrix(1, 0)) / s;
38 z = (matrix(0, 2) + matrix(2, 0)) / s;
39 }
else if (matrix(1, 1) > matrix(2, 2)) {
40 float s = 2.0f * sqrt(1.0f + matrix(1, 1) - matrix(0, 0) - matrix(2, 2));
41 w = (matrix(0, 2) - matrix(2, 0)) / s;
42 x = (matrix(0, 1) + matrix(1, 0)) / s;
44 z = (matrix(1, 2) + matrix(2, 1)) / s;
46 float s = 2.0f * sqrt(1.0f + matrix(2, 2) - matrix(0, 0) - matrix(1, 1));
47 w = (matrix(1, 0) - matrix(0, 1)) / s;
48 x = (matrix(0, 2) + matrix(2, 0)) / s;
49 y = (matrix(1, 2) + matrix(2, 1)) / s;
172 rotationMatrix(0, 0) = r.
GetX(); rotationMatrix(0, 1) = r.
GetY(); rotationMatrix(0, 2) = r.
GetZ(); rotationMatrix(0, 3) = 0.0f;
173 rotationMatrix(1, 0) = u.
GetX(); rotationMatrix(1, 1) = u.
GetY(); rotationMatrix(1, 2) = u.
GetZ(); rotationMatrix(1, 3) = 0.0f;
174 rotationMatrix(2, 0) = -f.
GetX(); rotationMatrix(2, 1) = -f.
GetY(); rotationMatrix(2, 2) = -f.
GetZ(); rotationMatrix(2, 3) = 0.0f;
175 rotationMatrix(3, 0) = 0.0f; rotationMatrix(3, 1) = 0.0f; rotationMatrix(3, 2) = 0.0f; rotationMatrix(3, 3) = 1.0f;