mirror of
https://github.com/recp/cglm.git
synced 2025-10-03 16:51:35 +00:00
156 lines
2.2 KiB
C
156 lines
2.2 KiB
C
/*
|
|
* Copyright (c), Recep Aslantas.
|
|
*
|
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
|
* Full license can be found in the LICENSE file
|
|
*/
|
|
|
|
#ifndef cglm_affine_h
|
|
#define cglm_affine_h
|
|
|
|
#include "cglm.h"
|
|
|
|
CGLM_INLINE
|
|
void
|
|
glm_translate(mat4 m, vec3 v, mat4 dest) {
|
|
dest[3][0] = m[3][0] + v[0];
|
|
dest[3][1] = m[3][1] + v[1];
|
|
dest[3][2] = m[3][2] + v[2];
|
|
}
|
|
|
|
CGLM_INLINE
|
|
void
|
|
glm_translate_self(mat4 m, vec3 v) {
|
|
m[3][0] += v[0];
|
|
m[3][1] += v[1];
|
|
m[3][2] += v[2];
|
|
}
|
|
|
|
CGLM_INLINE
|
|
void
|
|
glm_translate_x(mat4 m, float to) {
|
|
m[3][0] += to;
|
|
}
|
|
|
|
CGLM_INLINE
|
|
void
|
|
glm_translate_y(mat4 m, float to) {
|
|
m[3][1] += to;
|
|
}
|
|
|
|
CGLM_INLINE
|
|
void
|
|
glm_translate_z(mat4 m, float to) {
|
|
m[3][2] += to;
|
|
}
|
|
|
|
/* move */
|
|
|
|
CGLM_INLINE
|
|
void
|
|
glm_move(mat4 m, vec3 v) {
|
|
m[3][0] = v[0];
|
|
m[3][1] = v[1];
|
|
m[3][2] = v[2];
|
|
}
|
|
|
|
CGLM_INLINE
|
|
void
|
|
glm_move_x(mat4 m, float to) {
|
|
m[3][0] = to;
|
|
}
|
|
|
|
CGLM_INLINE
|
|
void
|
|
glm_move_y(mat4 m, float to) {
|
|
m[3][1] = to;
|
|
}
|
|
|
|
CGLM_INLINE
|
|
void
|
|
glm_move_z(mat4 m, float to) {
|
|
m[3][2] = to;
|
|
}
|
|
|
|
/* scale */
|
|
|
|
CGLM_INLINE
|
|
void
|
|
glm_scale(mat4 m, vec3 v, mat4 dest) {
|
|
dest[0][0] = m[0][0] * v[0];
|
|
dest[1][1] = m[1][1] * v[1];
|
|
dest[2][2] = m[2][2] * v[2];
|
|
}
|
|
|
|
CGLM_INLINE
|
|
void
|
|
glm_scale_self(mat4 m, vec3 v) {
|
|
m[0][0] *= v[0];
|
|
m[1][1] *= v[1];
|
|
m[2][2] *= v[2];
|
|
}
|
|
|
|
CGLM_INLINE
|
|
void
|
|
glm_scale1_self(mat4 m, float s) {
|
|
m[0][0] *= s;
|
|
m[1][1] *= s;
|
|
m[2][2] *= s;
|
|
}
|
|
|
|
CGLM_INLINE
|
|
void
|
|
glm_rotate_x(mat4 m, float rad, mat4 dest) {
|
|
float cosVal;
|
|
float sinVal;
|
|
mat4 t = GLM_MAT_IDENTITY_4F;
|
|
|
|
cosVal = cos(rad);
|
|
sinVal = sin(rad);
|
|
|
|
t[1][1] = cosVal;
|
|
t[1][2] = sinVal;
|
|
t[2][1] = -sinVal;
|
|
t[2][2] = cosVal;
|
|
|
|
glm_mat_mul4(t, m, dest);
|
|
}
|
|
|
|
CGLM_INLINE
|
|
void
|
|
glm_rotate_y(mat4 m, float rad, mat4 dest) {
|
|
float cosVal;
|
|
float sinVal;
|
|
mat4 t = GLM_MAT_IDENTITY_4F;
|
|
|
|
cosVal = cos(rad);
|
|
sinVal = sin(rad);
|
|
|
|
t[0][0] = cosVal;
|
|
t[0][2] = -sinVal;
|
|
t[2][0] = sinVal;
|
|
t[2][2] = cosVal;
|
|
|
|
glm_mat_mul4(t, m, dest);
|
|
}
|
|
|
|
CGLM_INLINE
|
|
void
|
|
glm_rotate_z(mat4 m, float rad, mat4 dest) {
|
|
float cosVal;
|
|
float sinVal;
|
|
mat4 t = GLM_MAT_IDENTITY_4F;
|
|
|
|
cosVal = cos(rad);
|
|
sinVal = sin(rad);
|
|
|
|
t[0][0] = cosVal;
|
|
t[0][1] = sinVal;
|
|
t[1][0] = -sinVal;
|
|
t[1][1] = cosVal;
|
|
|
|
glm_mat_mul4(t, m, dest);
|
|
}
|
|
|
|
#endif /* cglm_affine_h */
|