Quaterniaon initial rework.

This commit is contained in:
Relintai 2023-05-26 19:06:00 +02:00
parent fd9f995b5e
commit 75a64fd975
2 changed files with 69 additions and 54 deletions

View File

@ -39,29 +39,6 @@ extern "C" {
static_assert(sizeof(pandemonium_quaternion) == sizeof(Quaternion), "Quaternion size mismatch");
void GDAPI pandemonium_quaternion_new(pandemonium_quaternion *r_dest, const pandemonium_real p_x, const pandemonium_real p_y, const pandemonium_real p_z, const pandemonium_real p_w) {
Quaternion *dest = (Quaternion *)r_dest;
*dest = Quaternion(p_x, p_y, p_z, p_w);
}
void GDAPI pandemonium_quaternion_new_with_axis_angle(pandemonium_quaternion *r_dest, const pandemonium_vector3 *p_axis, const pandemonium_real p_angle) {
const Vector3 *axis = (const Vector3 *)p_axis;
Quaternion *dest = (Quaternion *)r_dest;
*dest = Quaternion(*axis, p_angle);
}
void GDAPI pandemonium_quaternion_new_with_basis(pandemonium_quaternion *r_dest, const pandemonium_basis *p_basis) {
const Basis *basis = (const Basis *)p_basis;
Quaternion *dest = (Quaternion *)r_dest;
*dest = Quaternion(*basis);
}
void GDAPI pandemonium_quaternion_new_with_euler(pandemonium_quaternion *r_dest, const pandemonium_vector3 *p_euler) {
const Vector3 *euler = (const Vector3 *)p_euler;
Quaternion *dest = (Quaternion *)r_dest;
*dest = Quaternion(*euler);
}
pandemonium_real GDAPI pandemonium_quaternion_get_x(const pandemonium_quaternion *p_self) {
const Quaternion *self = (const Quaternion *)p_self;
return self->x;
@ -102,13 +79,6 @@ void GDAPI pandemonium_quaternion_set_w(pandemonium_quaternion *p_self, const pa
self->w = val;
}
pandemonium_string GDAPI pandemonium_quaternion_as_string(const pandemonium_quaternion *p_self) {
pandemonium_string ret;
const Quaternion *self = (const Quaternion *)p_self;
memnew_placement(&ret, String(*self));
return ret;
}
pandemonium_real GDAPI pandemonium_quaternion_length(const pandemonium_quaternion *p_self) {
const Quaternion *self = (const Quaternion *)p_self;
return self->length();
@ -232,6 +202,36 @@ void GDAPI pandemonium_quaternion_set_axis_angle(pandemonium_quaternion *p_self,
self->set_axis_angle(*axis, p_angle);
}
pandemonium_string GDAPI pandemonium_quaternion_as_string(const pandemonium_quaternion *p_self) {
pandemonium_string ret;
const Quaternion *self = (const Quaternion *)p_self;
memnew_placement(&ret, String(*self));
return ret;
}
void GDAPI pandemonium_quaternion_new(pandemonium_quaternion *r_dest, const pandemonium_real p_x, const pandemonium_real p_y, const pandemonium_real p_z, const pandemonium_real p_w) {
Quaternion *dest = (Quaternion *)r_dest;
*dest = Quaternion(p_x, p_y, p_z, p_w);
}
void GDAPI pandemonium_quaternion_new_with_axis_angle(pandemonium_quaternion *r_dest, const pandemonium_vector3 *p_axis, const pandemonium_real p_angle) {
const Vector3 *axis = (const Vector3 *)p_axis;
Quaternion *dest = (Quaternion *)r_dest;
*dest = Quaternion(*axis, p_angle);
}
void GDAPI pandemonium_quaternion_new_with_basis(pandemonium_quaternion *r_dest, const pandemonium_basis *p_basis) {
const Basis *basis = (const Basis *)p_basis;
Quaternion *dest = (Quaternion *)r_dest;
*dest = Quaternion(*basis);
}
void GDAPI pandemonium_quaternion_new_with_euler(pandemonium_quaternion *r_dest, const pandemonium_vector3 *p_euler) {
const Vector3 *euler = (const Vector3 *)p_euler;
Quaternion *dest = (Quaternion *)r_dest;
*dest = Quaternion(*euler);
}
#ifdef __cplusplus
}
#endif

View File

@ -58,11 +58,6 @@ typedef struct {
extern "C" {
#endif
void GDAPI pandemonium_quaternion_new(pandemonium_quaternion *r_dest, const pandemonium_real p_x, const pandemonium_real p_y, const pandemonium_real p_z, const pandemonium_real p_w);
void GDAPI pandemonium_quaternion_new_with_axis_angle(pandemonium_quaternion *r_dest, const pandemonium_vector3 *p_axis, const pandemonium_real p_angle);
void GDAPI pandemonium_quaternion_new_with_basis(pandemonium_quaternion *r_dest, const pandemonium_basis *p_basis);
void GDAPI pandemonium_quaternion_new_with_euler(pandemonium_quaternion *r_dest, const pandemonium_vector3 *p_euler);
pandemonium_real GDAPI pandemonium_quaternion_get_x(const pandemonium_quaternion *p_self);
void GDAPI pandemonium_quaternion_set_x(pandemonium_quaternion *p_self, const pandemonium_real val);
@ -75,41 +70,61 @@ void GDAPI pandemonium_quaternion_set_z(pandemonium_quaternion *p_self, const pa
pandemonium_real GDAPI pandemonium_quaternion_get_w(const pandemonium_quaternion *p_self);
void GDAPI pandemonium_quaternion_set_w(pandemonium_quaternion *p_self, const pandemonium_real val);
pandemonium_string GDAPI pandemonium_quaternion_as_string(const pandemonium_quaternion *p_self);
pandemonium_real GDAPI pandemonium_quaternion_length(const pandemonium_quaternion *p_self);
pandemonium_real GDAPI pandemonium_quaternion_length_squared(const pandemonium_quaternion *p_self);
//bool is_equal_approx(const Quaternion &p_quat) const;
pandemonium_real GDAPI pandemonium_quaternion_length(const pandemonium_quaternion *p_self);
//void normalize();
pandemonium_quaternion GDAPI pandemonium_quaternion_normalized(const pandemonium_quaternion *p_self);
pandemonium_bool GDAPI pandemonium_quaternion_is_normalized(const pandemonium_quaternion *p_self);
pandemonium_quaternion GDAPI pandemonium_quaternion_inverse(const pandemonium_quaternion *p_self);
//Quaternion log() const;
//Quaternion exp() const;
pandemonium_real GDAPI pandemonium_quaternion_dot(const pandemonium_quaternion *p_self, const pandemonium_quaternion *p_b);
//real_t angle_to(const Quaternion &p_to) const;
//void set_euler_xyz(const Vector3 &p_euler);
//Vector3 get_euler_xyz() const;
//void set_euler_yxz(const Vector3 &p_euler);
//Vector3 get_euler_yxz() const;
//void set_euler(const Vector3 &p_euler) { set_euler_yxz(p_euler); };
//Vector3 get_euler() const { return get_euler_yxz(); };
pandemonium_quaternion GDAPI pandemonium_quaternion_slerp(const pandemonium_quaternion *p_self, const pandemonium_quaternion *p_b, const pandemonium_real p_t);
pandemonium_quaternion GDAPI pandemonium_quaternion_slerpni(const pandemonium_quaternion *p_self, const pandemonium_quaternion *p_b, const pandemonium_real p_t);
pandemonium_quaternion GDAPI pandemonium_quaternion_cubic_slerp(const pandemonium_quaternion *p_self, const pandemonium_quaternion *p_b, const pandemonium_quaternion *p_pre_a, const pandemonium_quaternion *p_post_b, const pandemonium_real p_t);
//Quaternion spherical_cubic_interpolate(const Quaternion &p_b, const Quaternion &p_pre_a, const Quaternion &p_post_b, const real_t &p_weight) const;
//Vector3 get_axis() const;
//float get_angle() const;
void GDAPI pandemonium_quaternion_set_axis_angle(pandemonium_quaternion *p_self, const pandemonium_vector3 *p_axis, const pandemonium_real p_angle);
//_FORCE_INLINE_ void get_axis_angle(Vector3 &r_axis, real_t &r_angle) const {
//void operator*=(const Quaternion &p_q);
pandemonium_vector3 GDAPI pandemonium_quaternion_xform(const pandemonium_quaternion *p_self, const pandemonium_vector3 *p_v);
pandemonium_quaternion GDAPI pandemonium_quaternion_slerp(const pandemonium_quaternion *p_self, const pandemonium_quaternion *p_b, const pandemonium_real p_t);
pandemonium_quaternion GDAPI pandemonium_quaternion_slerpni(const pandemonium_quaternion *p_self, const pandemonium_quaternion *p_b, const pandemonium_real p_t);
pandemonium_quaternion GDAPI pandemonium_quaternion_cubic_slerp(const pandemonium_quaternion *p_self, const pandemonium_quaternion *p_b, const pandemonium_quaternion *p_pre_a, const pandemonium_quaternion *p_post_b, const pandemonium_real p_t);
pandemonium_quaternion GDAPI pandemonium_quaternion_operator_multiply(const pandemonium_quaternion *p_self, const pandemonium_real p_b);
pandemonium_quaternion GDAPI pandemonium_quaternion_operator_add(const pandemonium_quaternion *p_self, const pandemonium_quaternion *p_b);
pandemonium_quaternion GDAPI pandemonium_quaternion_operator_subtract(const pandemonium_quaternion *p_self, const pandemonium_quaternion *p_b);
pandemonium_quaternion GDAPI pandemonium_quaternion_operator_multiply(const pandemonium_quaternion *p_self, const pandemonium_real p_b);
pandemonium_quaternion GDAPI pandemonium_quaternion_operator_divide(const pandemonium_quaternion *p_self, const pandemonium_real p_b);
pandemonium_bool GDAPI pandemonium_quaternion_operator_equal(const pandemonium_quaternion *p_self, const pandemonium_quaternion *p_b);
pandemonium_quaternion GDAPI pandemonium_quaternion_operator_neg(const pandemonium_quaternion *p_self);
void GDAPI pandemonium_quaternion_set_axis_angle(pandemonium_quaternion *p_self, const pandemonium_vector3 *p_axis, const pandemonium_real p_angle);
pandemonium_bool GDAPI pandemonium_quaternion_operator_equal(const pandemonium_quaternion *p_self, const pandemonium_quaternion *p_b);
pandemonium_string GDAPI pandemonium_quaternion_as_string(const pandemonium_quaternion *p_self);
//inline void set(real_t p_x, real_t p_y, real_t p_z, real_t p_w) {
void GDAPI pandemonium_quaternion_new(pandemonium_quaternion *r_dest, const pandemonium_real p_x, const pandemonium_real p_y, const pandemonium_real p_z, const pandemonium_real p_w);
void GDAPI pandemonium_quaternion_new_with_axis_angle(pandemonium_quaternion *r_dest, const pandemonium_vector3 *p_axis, const pandemonium_real p_angle);
void GDAPI pandemonium_quaternion_new_with_basis(pandemonium_quaternion *r_dest, const pandemonium_basis *p_basis);
void GDAPI pandemonium_quaternion_new_with_euler(pandemonium_quaternion *r_dest, const pandemonium_vector3 *p_euler);
//Quaternion(const Vector3 &v0, const Vector3 &v1) // shortest arc
#ifdef __cplusplus
}