mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
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:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user