This is the changelog for developers, != changelog for the end user
that we distribute with the binaries. (see changelog)
+11/06/2006
+SPoG
+- Fixed arbitrary rotation X and Y axes appearing to be transposed.
+
04/06/2006
SPoG
- Fixed crash when deleting items from Build menu.
return Quaternion(axis[0] * sa, axis[1] * sa, axis[2] * sa, static_cast<float>(cos(angle)));
}
+inline Quaternion quaternion_for_x(double angle)
+{
+ angle *= 0.5;
+ return Quaternion(static_cast<float>(sin(angle)), 0, 0, static_cast<float>(cos(angle)));
+}
+
+inline Quaternion quaternion_for_y(double angle)
+{
+ angle *= 0.5;
+ return Quaternion(0, static_cast<float>(sin(angle)), 0, static_cast<float>(cos(angle)));
+}
+
+inline Quaternion quaternion_for_z(double angle)
+{
+ angle *= 0.5;
+ return Quaternion(0, 0, static_cast<float>(sin(angle)), static_cast<float>(cos(angle)));
+}
+
inline Quaternion quaternion_inverse(const Quaternion& quaternion)
{
return Quaternion(vector3_negated(vector4_to_vector3(quaternion)), quaternion[3]);
#include <gtk/gtklabel.h>
#include <gdk/gdkkeysyms.h>
+
inline Quaternion quaternion_for_euler_xyz_degrees(const Vector3& eulerXYZ)
{
+#if 0
+ return quaternion_for_matrix4_rotation(matrix4_rotation_for_euler_xyz_degrees(eulerXYZ));
+#elif 0
+ return quaternion_multiplied_by_quaternion(
+ quaternion_multiplied_by_quaternion(
+ quaternion_for_z(degrees_to_radians(eulerXYZ[2])),
+ quaternion_for_y(degrees_to_radians(eulerXYZ[1]))
+ ),
+ quaternion_for_x(degrees_to_radians(eulerXYZ[0]))
+ );
+#elif 1
double cx = cos(degrees_to_radians(eulerXYZ[0] * 0.5));
double sx = sin(degrees_to_radians(eulerXYZ[0] * 0.5));
double cy = cos(degrees_to_radians(eulerXYZ[1] * 0.5));
double sz = sin(degrees_to_radians(eulerXYZ[2] * 0.5));
return Quaternion(
- static_cast<float>(cx * sy * cz - sx * cy * sz),
- static_cast<float>(cx * sy * sz + sx * cy * cz),
- static_cast<float>(cx * cy * sz - sx * sy * cz),
- static_cast<float>(cx * cy * cz + sx * sy * sz)
+ cz * cy * sx - sz * sy * cx,
+ cz * sy * cx + sz * cy * sx,
+ sz * cy * cx - cz * sy * sx,
+ cz * cy * cx + sz * sy * sx
);
+#endif
}
struct RotateDialog