Add mat4_orbit.

This commit is contained in:
Roz K 2022-12-29 08:11:12 +01:00
parent 269d7821c8
commit 33abfd834a
Signed by: roz
GPG Key ID: 51FBF4E483E1C822
3 changed files with 33 additions and 1 deletions

View File

@ -182,6 +182,14 @@ mat4_lookat.argtypes = (
_vec3_p, # position _vec3_p, # position
_vec3_p) # lookat _vec3_p) # lookat
mat4_orbit = _engine.rk_mat4_orbit
mat4_orbit.argtypes = (
_mat4_p, # ret
_vec3_p, # origin
ctypes.c_float, # yaw
ctypes.c_float, # pitch
ctypes.c_float) # distance
mat4_mul_vec3 = _engine.rk_mat4_mul_vec3 mat4_mul_vec3 = _engine.rk_mat4_mul_vec3
mat4_mul_vec3.argtypes = ( mat4_mul_vec3.argtypes = (
_vec3_p, # ret _vec3_p, # ret

View File

@ -64,7 +64,19 @@ void rk_mat4_lookat(
rk_mat4 & ret, rk_mat4 & ret,
rk_vec3 const & position, rk_vec3 const & position,
rk_vec3 const & lookat) { rk_vec3 const & lookat) {
ret = glm::lookAtRH(position, lookat, glm::vec3(0.0f, 0.0f, 1.0f)); ret = glm::lookAtRH(position, lookat, vec3_up);
}
void rk_mat4_orbit(
rk_mat4 & ret,
rk_vec3 const & origin,
float const yaw,
float const pitch,
float const distance) {
ret = glm::translate(
glm::lookAtRH(glm::vec3(0.f, -distance, 0.f), vec3_origin, vec3_up) *
glm::mat4(glm::angleAxis(pitch, vec3_right) * glm::angleAxis(yaw, vec3_up)),
origin);
} }
void rk_mat4_mul_vec3( void rk_mat4_mul_vec3(

View File

@ -26,6 +26,11 @@ typedef glm::vec4 rk_vec4;
typedef glm::mat3 rk_mat3; typedef glm::mat3 rk_mat3;
typedef glm::mat4 rk_mat4; typedef glm::mat4 rk_mat4;
#define vec3_right (rk_vec3(1.f, 0.f, 0.f))
#define vec3_forward (rk_vec3(0.f, 1.f, 0.f))
#define vec3_up (rk_vec3(0.f, 0.f, 1.f))
#define vec3_origin (rk_vec3(0.f, 0.f, 0.f))
RK_EXPORT void rk_vec3_rotate( RK_EXPORT void rk_vec3_rotate(
rk_vec3 & ret, rk_vec3 & ret,
rk_vec3 const & vec3, rk_vec3 const & vec3,
@ -64,6 +69,13 @@ RK_EXPORT void rk_mat4_lookat(
rk_vec3 const & position, rk_vec3 const & position,
rk_vec3 const & lookat); rk_vec3 const & lookat);
RK_EXPORT void rk_mat4_orbit(
rk_mat4 & ret,
rk_vec3 const & origin,
float const yaw,
float const pitch,
float const distance);
RK_EXPORT void rk_mat4_mul_vec3( RK_EXPORT void rk_mat4_mul_vec3(
rk_vec3 & ret, rk_vec3 & ret,
rk_mat4 const & a, rk_mat4 const & a,