mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
struct: euler api as structs
This commit is contained in:
@@ -25,6 +25,7 @@ extern "C" {
|
|||||||
#include "struct/io.h"
|
#include "struct/io.h"
|
||||||
#include "struct/cam.h"
|
#include "struct/cam.h"
|
||||||
#include "struct/quat.h"
|
#include "struct/quat.h"
|
||||||
|
#include "struct/euler.h"
|
||||||
#include "struct/project.h"
|
#include "struct/project.h"
|
||||||
#include "struct/sphere.h"
|
#include "struct/sphere.h"
|
||||||
#include "struct/curve.h"
|
#include "struct/curve.h"
|
||||||
|
|||||||
152
include/cglm/struct/euler.h
Normal file
152
include/cglm/struct/euler.h
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c), Recep Aslantas.
|
||||||
|
*
|
||||||
|
* MIT License (MIT), http://opensource.org/licenses/MIT
|
||||||
|
* Full license can be found in the LICENSE file
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
NOTE:
|
||||||
|
angles must be passed as [X-Angle, Y-Angle, Z-angle] order
|
||||||
|
For instance you don't pass angles as [Z-Angle, X-Angle, Y-angle] to
|
||||||
|
glm_euler_zxy funciton, All RELATED functions accept angles same order
|
||||||
|
which is [X, Y, Z].
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Types:
|
||||||
|
enum glm_euler_sq
|
||||||
|
|
||||||
|
Functions:
|
||||||
|
CGLM_INLINE vec3s glms_euler_angles(mat4s m)
|
||||||
|
CGLM_INLINE mat4s glms_euler_xyz(vec3s angles)
|
||||||
|
CGLM_INLINE mat4s glms_euler_xzy(vec3s angles)
|
||||||
|
CGLM_INLINE mat4s glms_euler_yxz(vec3s angles)
|
||||||
|
CGLM_INLINE mat4s glms_euler_yzx(vec3s angles)
|
||||||
|
CGLM_INLINE mat4s glms_euler_zxy(vec3s angles)
|
||||||
|
CGLM_INLINE mat4s glms_euler_zyx(vec3s angles)
|
||||||
|
CGLM_INLINE mat4s glms_euler_by_order(vec3s angles, glm_euler_sq ord)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef cglms_euler_h
|
||||||
|
#define cglms_euler_h
|
||||||
|
|
||||||
|
#include "../common.h"
|
||||||
|
#include "../types-struct.h"
|
||||||
|
#include "../euler.h"
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief extract euler angles (in radians) using xyz order
|
||||||
|
*
|
||||||
|
* @param[in] m affine transform
|
||||||
|
* @returns angles vector [x, y, z]
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
vec3s
|
||||||
|
glms_euler_angles(mat4s m) {
|
||||||
|
vec3s dest;
|
||||||
|
glm_euler_angles(m.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief build rotation matrix from euler angles
|
||||||
|
*
|
||||||
|
* @param[in] angles angles as vector [Xangle, Yangle, Zangle]
|
||||||
|
* @returns rotation matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_euler_xyz(vec3s angles) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_euler_xyz(angles.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief build rotation matrix from euler angles
|
||||||
|
*
|
||||||
|
* @param[in] angles angles as vector [Xangle, Yangle, Zangle]
|
||||||
|
* @returns rotation matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_euler_xzy(vec3s angles) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_euler_xzy(angles.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief build rotation matrix from euler angles
|
||||||
|
*
|
||||||
|
* @param[in] angles angles as vector [Xangle, Yangle, Zangle]
|
||||||
|
* @returns rotation matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_euler_yxz(vec3s angles) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_euler_yxz(angles.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief build rotation matrix from euler angles
|
||||||
|
*
|
||||||
|
* @param[in] angles angles as vector [Xangle, Yangle, Zangle]
|
||||||
|
* @returns rotation matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_euler_yzx(vec3s angles) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_euler_yzx(angles.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief build rotation matrix from euler angles
|
||||||
|
*
|
||||||
|
* @param[in] angles angles as vector [Xangle, Yangle, Zangle]
|
||||||
|
* @returns rotation matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_euler_zxy(vec3s angles) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_euler_zxy(angles.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief build rotation matrix from euler angles
|
||||||
|
*
|
||||||
|
* @param[in] angles angles as vector [Xangle, Yangle, Zangle]
|
||||||
|
* @returns rotation matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_euler_zyx(vec3s angles) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_euler_zyx(angles.raw, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief build rotation matrix from euler angles
|
||||||
|
*
|
||||||
|
* @param[in] angles angles as vector [Xangle, Yangle, Zangle]
|
||||||
|
* @param[in] ord euler order
|
||||||
|
* @returns rotation matrix
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
mat4s
|
||||||
|
glms_euler_by_order(vec3s angles, glm_euler_sq ord) {
|
||||||
|
mat4s dest;
|
||||||
|
glm_euler_by_order(angles.raw, ord, dest.raw);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* cglms_euler_h */
|
||||||
Reference in New Issue
Block a user