normalize quaternion before converting to matrix

* because it must be unit quaternion and didn't specified this in docs.

* we must provide alternative func for unit quat
This commit is contained in:
Recep Aslantas
2018-04-08 00:09:40 +03:00
parent 12c5307447
commit b27603c268

View File

@@ -182,15 +182,17 @@ glm_quat_mulv(versor q1, versor q2, versor dest) {
CGLM_INLINE CGLM_INLINE
void void
glm_quat_mat4(versor q, mat4 dest) { glm_quat_mat4(versor q, mat4 dest) {
float w, x, y, z; float w, x, y, z,
float xx, yy, zz; xx, yy, zz,
float xy, yz, xz; xy, yz, xz,
float wx, wy, wz; wx, wy, wz, norm;
w = q[0]; norm = 1.0f / glm_quat_norm(q);
x = q[1];
y = q[2]; w = q[0] * norm;
z = q[3]; x = q[1] * norm;
y = q[2] * norm;
z = q[3] * norm;
xx = 2.0f * x * x; xy = 2.0f * x * y; wx = 2.0f * w * x; xx = 2.0f * x * x; xy = 2.0f * x * y; wx = 2.0f * w * x;
yy = 2.0f * y * y; yz = 2.0f * y * z; wy = 2.0f * w * y; yy = 2.0f * y * y; yz = 2.0f * y * z; wy = 2.0f * w * y;
@@ -226,15 +228,17 @@ glm_quat_mat4(versor q, mat4 dest) {
CGLM_INLINE CGLM_INLINE
void void
glm_quat_mat3(versor q, mat3 dest) { glm_quat_mat3(versor q, mat3 dest) {
float w, x, y, z; float w, x, y, z,
float xx, yy, zz; xx, yy, zz,
float xy, yz, xz; xy, yz, xz,
float wx, wy, wz; wx, wy, wz, norm;
w = q[0]; norm = 1.0f / glm_quat_norm(q);
x = q[1];
y = q[2]; w = q[0] * norm;
z = q[3]; x = q[1] * norm;
y = q[2] * norm;
z = q[3] * norm;
xx = 2.0f * x * x; xy = 2.0f * x * y; wx = 2.0f * w * x; xx = 2.0f * x * x; xy = 2.0f * x * y; wx = 2.0f * w * x;
yy = 2.0f * y * y; yz = 2.0f * y * z; wy = 2.0f * w * y; yy = 2.0f * y * y; yz = 2.0f * y * z; wy = 2.0f * w * y;