mirror of
https://github.com/UberGames/GtkRadiant.git
synced 2024-11-10 22:51:59 +00:00
fixed arbitrary rotation
git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/trunk@83 8a3a26a2-13c4-0310-b231-cf6edde360e5
This commit is contained in:
parent
ebeb23b783
commit
2a1870f6d6
3 changed files with 39 additions and 4 deletions
4
CHANGES
4
CHANGES
|
@ -1,6 +1,10 @@
|
|||
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.
|
||||
|
|
|
@ -60,6 +60,24 @@ inline Quaternion quaternion_for_axisangle(const Vector3& axis, double angle)
|
|||
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]);
|
||||
|
|
|
@ -756,8 +756,20 @@ void Selection_destroy()
|
|||
#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));
|
||||
|
@ -766,11 +778,12 @@ inline Quaternion quaternion_for_euler_xyz_degrees(const Vector3& eulerXYZ)
|
|||
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
|
||||
|
|
Loading…
Reference in a new issue