Merge pull request #45364 from madmiraal/rename-quat
Rename Quat to Quaternion
This commit is contained in:
commit
6f7d45d210
@ -580,7 +580,7 @@ void register_global_constants() {
|
|||||||
BIND_CORE_ENUM_CONSTANT_CUSTOM("TYPE_VECTOR3I", Variant::VECTOR3I);
|
BIND_CORE_ENUM_CONSTANT_CUSTOM("TYPE_VECTOR3I", Variant::VECTOR3I);
|
||||||
BIND_CORE_ENUM_CONSTANT_CUSTOM("TYPE_TRANSFORM2D", Variant::TRANSFORM2D);
|
BIND_CORE_ENUM_CONSTANT_CUSTOM("TYPE_TRANSFORM2D", Variant::TRANSFORM2D);
|
||||||
BIND_CORE_ENUM_CONSTANT_CUSTOM("TYPE_PLANE", Variant::PLANE);
|
BIND_CORE_ENUM_CONSTANT_CUSTOM("TYPE_PLANE", Variant::PLANE);
|
||||||
BIND_CORE_ENUM_CONSTANT_CUSTOM("TYPE_QUAT", Variant::QUAT);
|
BIND_CORE_ENUM_CONSTANT_CUSTOM("TYPE_QUATERNION", Variant::QUATERNION);
|
||||||
BIND_CORE_ENUM_CONSTANT_CUSTOM("TYPE_AABB", Variant::AABB);
|
BIND_CORE_ENUM_CONSTANT_CUSTOM("TYPE_AABB", Variant::AABB);
|
||||||
BIND_CORE_ENUM_CONSTANT_CUSTOM("TYPE_BASIS", Variant::BASIS);
|
BIND_CORE_ENUM_CONSTANT_CUSTOM("TYPE_BASIS", Variant::BASIS);
|
||||||
BIND_CORE_ENUM_CONSTANT_CUSTOM("TYPE_TRANSFORM3D", Variant::TRANSFORM3D);
|
BIND_CORE_ENUM_CONSTANT_CUSTOM("TYPE_TRANSFORM3D", Variant::TRANSFORM3D);
|
||||||
|
@ -279,9 +279,9 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int
|
|||||||
}
|
}
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case Variant::QUAT: {
|
case Variant::QUATERNION: {
|
||||||
ERR_FAIL_COND_V(len < 4 * 4, ERR_INVALID_DATA);
|
ERR_FAIL_COND_V(len < 4 * 4, ERR_INVALID_DATA);
|
||||||
Quat val;
|
Quaternion val;
|
||||||
val.x = decode_float(&buf[0]);
|
val.x = decode_float(&buf[0]);
|
||||||
val.y = decode_float(&buf[4]);
|
val.y = decode_float(&buf[4]);
|
||||||
val.z = decode_float(&buf[8]);
|
val.z = decode_float(&buf[8]);
|
||||||
@ -1099,9 +1099,9 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
|||||||
r_len += 4 * 4;
|
r_len += 4 * 4;
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case Variant::QUAT: {
|
case Variant::QUATERNION: {
|
||||||
if (buf) {
|
if (buf) {
|
||||||
Quat q = p_variant;
|
Quaternion q = p_variant;
|
||||||
encode_float(q.x, &buf[0]);
|
encode_float(q.x, &buf[0]);
|
||||||
encode_float(q.y, &buf[4]);
|
encode_float(q.y, &buf[4]);
|
||||||
encode_float(q.z, &buf[8]);
|
encode_float(q.z, &buf[8]);
|
||||||
|
@ -227,7 +227,7 @@ uint32_t PackedDataContainer::_pack(const Variant &p_data, Vector<uint8_t> &tmpd
|
|||||||
case Variant::VECTOR3:
|
case Variant::VECTOR3:
|
||||||
case Variant::TRANSFORM2D:
|
case Variant::TRANSFORM2D:
|
||||||
case Variant::PLANE:
|
case Variant::PLANE:
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
case Variant::AABB:
|
case Variant::AABB:
|
||||||
case Variant::BASIS:
|
case Variant::BASIS:
|
||||||
case Variant::TRANSFORM3D:
|
case Variant::TRANSFORM3D:
|
||||||
|
@ -51,7 +51,7 @@ enum {
|
|||||||
VARIANT_RECT2 = 11,
|
VARIANT_RECT2 = 11,
|
||||||
VARIANT_VECTOR3 = 12,
|
VARIANT_VECTOR3 = 12,
|
||||||
VARIANT_PLANE = 13,
|
VARIANT_PLANE = 13,
|
||||||
VARIANT_QUAT = 14,
|
VARIANT_QUATERNION = 14,
|
||||||
VARIANT_AABB = 15,
|
VARIANT_AABB = 15,
|
||||||
VARIANT_MATRIX3 = 16,
|
VARIANT_MATRIX3 = 16,
|
||||||
VARIANT_TRANSFORM = 17,
|
VARIANT_TRANSFORM = 17,
|
||||||
@ -199,8 +199,8 @@ Error ResourceLoaderBinary::parse_variant(Variant &r_v) {
|
|||||||
v.d = f->get_real();
|
v.d = f->get_real();
|
||||||
r_v = v;
|
r_v = v;
|
||||||
} break;
|
} break;
|
||||||
case VARIANT_QUAT: {
|
case VARIANT_QUATERNION: {
|
||||||
Quat v;
|
Quaternion v;
|
||||||
v.x = f->get_real();
|
v.x = f->get_real();
|
||||||
v.y = f->get_real();
|
v.y = f->get_real();
|
||||||
v.z = f->get_real();
|
v.z = f->get_real();
|
||||||
@ -1371,9 +1371,9 @@ void ResourceFormatSaverBinaryInstance::write_variant(FileAccess *f, const Varia
|
|||||||
f->store_real(val.d);
|
f->store_real(val.d);
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case Variant::QUAT: {
|
case Variant::QUATERNION: {
|
||||||
f->store_32(VARIANT_QUAT);
|
f->store_32(VARIANT_QUATERNION);
|
||||||
Quat val = p_property;
|
Quaternion val = p_property;
|
||||||
f->store_real(val.x);
|
f->store_real(val.x);
|
||||||
f->store_real(val.y);
|
f->store_real(val.y);
|
||||||
f->store_real(val.z);
|
f->store_real(val.z);
|
||||||
|
@ -345,12 +345,12 @@ void Basis::rotate(const Vector3 &p_euler) {
|
|||||||
*this = rotated(p_euler);
|
*this = rotated(p_euler);
|
||||||
}
|
}
|
||||||
|
|
||||||
Basis Basis::rotated(const Quat &p_quat) const {
|
Basis Basis::rotated(const Quaternion &p_quaternion) const {
|
||||||
return Basis(p_quat) * (*this);
|
return Basis(p_quaternion) * (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Basis::rotate(const Quat &p_quat) {
|
void Basis::rotate(const Quaternion &p_quaternion) {
|
||||||
*this = rotated(p_quat);
|
*this = rotated(p_quaternion);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3 Basis::get_rotation_euler() const {
|
Vector3 Basis::get_rotation_euler() const {
|
||||||
@ -367,7 +367,7 @@ Vector3 Basis::get_rotation_euler() const {
|
|||||||
return m.get_euler();
|
return m.get_euler();
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat Basis::get_rotation_quat() const {
|
Quaternion Basis::get_rotation_quaternion() const {
|
||||||
// Assumes that the matrix can be decomposed into a proper rotation and scaling matrix as M = R.S,
|
// Assumes that the matrix can be decomposed into a proper rotation and scaling matrix as M = R.S,
|
||||||
// and returns the Euler angles corresponding to the rotation part, complementing get_scale().
|
// and returns the Euler angles corresponding to the rotation part, complementing get_scale().
|
||||||
// See the comment in get_scale() for further information.
|
// See the comment in get_scale() for further information.
|
||||||
@ -378,7 +378,7 @@ Quat Basis::get_rotation_quat() const {
|
|||||||
m.scale(Vector3(-1, -1, -1));
|
m.scale(Vector3(-1, -1, -1));
|
||||||
}
|
}
|
||||||
|
|
||||||
return m.get_quat();
|
return m.get_quaternion();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Basis::get_rotation_axis_angle(Vector3 &p_axis, real_t &p_angle) const {
|
void Basis::get_rotation_axis_angle(Vector3 &p_axis, real_t &p_angle) const {
|
||||||
@ -770,9 +770,9 @@ Basis::operator String() const {
|
|||||||
return mtx;
|
return mtx;
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat Basis::get_quat() const {
|
Quaternion Basis::get_quaternion() const {
|
||||||
#ifdef MATH_CHECKS
|
#ifdef MATH_CHECKS
|
||||||
ERR_FAIL_COND_V_MSG(!is_rotation(), Quat(), "Basis must be normalized in order to be casted to a Quaternion. Use get_rotation_quat() or call orthonormalized() instead.");
|
ERR_FAIL_COND_V_MSG(!is_rotation(), Quaternion(), "Basis must be normalized in order to be casted to a Quaternion. Use get_rotation_quaternion() or call orthonormalized() instead.");
|
||||||
#endif
|
#endif
|
||||||
/* Allow getting a quaternion from an unnormalized transform */
|
/* Allow getting a quaternion from an unnormalized transform */
|
||||||
Basis m = *this;
|
Basis m = *this;
|
||||||
@ -803,7 +803,7 @@ Quat Basis::get_quat() const {
|
|||||||
temp[k] = (m.elements[k][i] + m.elements[i][k]) * s;
|
temp[k] = (m.elements[k][i] + m.elements[i][k]) * s;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Quat(temp[0], temp[1], temp[2], temp[3]);
|
return Quaternion(temp[0], temp[1], temp[2], temp[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const Basis _ortho_bases[24] = {
|
static const Basis _ortho_bases[24] = {
|
||||||
@ -945,13 +945,13 @@ void Basis::get_axis_angle(Vector3 &r_axis, real_t &r_angle) const {
|
|||||||
r_angle = angle;
|
r_angle = angle;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Basis::set_quat(const Quat &p_quat) {
|
void Basis::set_quaternion(const Quaternion &p_quaternion) {
|
||||||
real_t d = p_quat.length_squared();
|
real_t d = p_quaternion.length_squared();
|
||||||
real_t s = 2.0 / d;
|
real_t s = 2.0 / d;
|
||||||
real_t xs = p_quat.x * s, ys = p_quat.y * s, zs = p_quat.z * s;
|
real_t xs = p_quaternion.x * s, ys = p_quaternion.y * s, zs = p_quaternion.z * s;
|
||||||
real_t wx = p_quat.w * xs, wy = p_quat.w * ys, wz = p_quat.w * zs;
|
real_t wx = p_quaternion.w * xs, wy = p_quaternion.w * ys, wz = p_quaternion.w * zs;
|
||||||
real_t xx = p_quat.x * xs, xy = p_quat.x * ys, xz = p_quat.x * zs;
|
real_t xx = p_quaternion.x * xs, xy = p_quaternion.x * ys, xz = p_quaternion.x * zs;
|
||||||
real_t yy = p_quat.y * ys, yz = p_quat.y * zs, zz = p_quat.z * zs;
|
real_t yy = p_quaternion.y * ys, yz = p_quaternion.y * zs, zz = p_quaternion.z * zs;
|
||||||
set(1.0 - (yy + zz), xy - wz, xz + wy,
|
set(1.0 - (yy + zz), xy - wz, xz + wy,
|
||||||
xy + wz, 1.0 - (xx + zz), yz - wx,
|
xy + wz, 1.0 - (xx + zz), yz - wx,
|
||||||
xz - wy, yz + wx, 1.0 - (xx + yy));
|
xz - wy, yz + wx, 1.0 - (xx + yy));
|
||||||
@ -997,9 +997,9 @@ void Basis::set_euler_scale(const Vector3 &p_euler, const Vector3 &p_scale) {
|
|||||||
rotate(p_euler);
|
rotate(p_euler);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Basis::set_quat_scale(const Quat &p_quat, const Vector3 &p_scale) {
|
void Basis::set_quaternion_scale(const Quaternion &p_quaternion, const Vector3 &p_scale) {
|
||||||
set_diagonal(p_scale);
|
set_diagonal(p_scale);
|
||||||
rotate(p_quat);
|
rotate(p_quaternion);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Basis::set_diagonal(const Vector3 &p_diag) {
|
void Basis::set_diagonal(const Vector3 &p_diag) {
|
||||||
@ -1018,8 +1018,8 @@ void Basis::set_diagonal(const Vector3 &p_diag) {
|
|||||||
|
|
||||||
Basis Basis::slerp(const Basis &p_to, const real_t &p_weight) const {
|
Basis Basis::slerp(const Basis &p_to, const real_t &p_weight) const {
|
||||||
//consider scale
|
//consider scale
|
||||||
Quat from(*this);
|
Quaternion from(*this);
|
||||||
Quat to(p_to);
|
Quaternion to(p_to);
|
||||||
|
|
||||||
Basis b(from.slerp(to, p_weight));
|
Basis b(from.slerp(to, p_weight));
|
||||||
b.elements[0] *= Math::lerp(elements[0].length(), p_to.elements[0].length(), p_weight);
|
b.elements[0] *= Math::lerp(elements[0].length(), p_to.elements[0].length(), p_weight);
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
#ifndef BASIS_H
|
#ifndef BASIS_H
|
||||||
#define BASIS_H
|
#define BASIS_H
|
||||||
|
|
||||||
#include "core/math/quat.h"
|
#include "core/math/quaternion.h"
|
||||||
#include "core/math/vector3.h"
|
#include "core/math/vector3.h"
|
||||||
|
|
||||||
class Basis {
|
class Basis {
|
||||||
@ -79,13 +79,13 @@ public:
|
|||||||
void rotate(const Vector3 &p_euler);
|
void rotate(const Vector3 &p_euler);
|
||||||
Basis rotated(const Vector3 &p_euler) const;
|
Basis rotated(const Vector3 &p_euler) const;
|
||||||
|
|
||||||
void rotate(const Quat &p_quat);
|
void rotate(const Quaternion &p_quaternion);
|
||||||
Basis rotated(const Quat &p_quat) const;
|
Basis rotated(const Quaternion &p_quaternion) const;
|
||||||
|
|
||||||
Vector3 get_rotation_euler() const;
|
Vector3 get_rotation_euler() const;
|
||||||
void get_rotation_axis_angle(Vector3 &p_axis, real_t &p_angle) const;
|
void get_rotation_axis_angle(Vector3 &p_axis, real_t &p_angle) const;
|
||||||
void get_rotation_axis_angle_local(Vector3 &p_axis, real_t &p_angle) const;
|
void get_rotation_axis_angle_local(Vector3 &p_axis, real_t &p_angle) const;
|
||||||
Quat get_rotation_quat() const;
|
Quaternion get_rotation_quaternion() const;
|
||||||
Vector3 get_rotation() const { return get_rotation_euler(); };
|
Vector3 get_rotation() const { return get_rotation_euler(); };
|
||||||
|
|
||||||
Vector3 rotref_posscale_decomposition(Basis &rotref) const;
|
Vector3 rotref_posscale_decomposition(Basis &rotref) const;
|
||||||
@ -108,8 +108,8 @@ public:
|
|||||||
Vector3 get_euler_zyx() const;
|
Vector3 get_euler_zyx() const;
|
||||||
void set_euler_zyx(const Vector3 &p_euler);
|
void set_euler_zyx(const Vector3 &p_euler);
|
||||||
|
|
||||||
Quat get_quat() const;
|
Quaternion get_quaternion() const;
|
||||||
void set_quat(const Quat &p_quat);
|
void set_quaternion(const Quaternion &p_quaternion);
|
||||||
|
|
||||||
Vector3 get_euler() const { return get_euler_yxz(); }
|
Vector3 get_euler() const { return get_euler_yxz(); }
|
||||||
void set_euler(const Vector3 &p_euler) { set_euler_yxz(p_euler); }
|
void set_euler(const Vector3 &p_euler) { set_euler_yxz(p_euler); }
|
||||||
@ -132,7 +132,7 @@ public:
|
|||||||
|
|
||||||
void set_axis_angle_scale(const Vector3 &p_axis, real_t p_phi, const Vector3 &p_scale);
|
void set_axis_angle_scale(const Vector3 &p_axis, real_t p_phi, const Vector3 &p_scale);
|
||||||
void set_euler_scale(const Vector3 &p_euler, const Vector3 &p_scale);
|
void set_euler_scale(const Vector3 &p_euler, const Vector3 &p_scale);
|
||||||
void set_quat_scale(const Quat &p_quat, const Vector3 &p_scale);
|
void set_quaternion_scale(const Quaternion &p_quaternion, const Vector3 &p_scale);
|
||||||
|
|
||||||
// transposed dot products
|
// transposed dot products
|
||||||
_FORCE_INLINE_ real_t tdotx(const Vector3 &v) const {
|
_FORCE_INLINE_ real_t tdotx(const Vector3 &v) const {
|
||||||
@ -240,10 +240,10 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
Basis diagonalize();
|
Basis diagonalize();
|
||||||
|
|
||||||
operator Quat() const { return get_quat(); }
|
operator Quaternion() const { return get_quaternion(); }
|
||||||
|
|
||||||
Basis(const Quat &p_quat) { set_quat(p_quat); };
|
Basis(const Quaternion &p_quaternion) { set_quaternion(p_quaternion); };
|
||||||
Basis(const Quat &p_quat, const Vector3 &p_scale) { set_quat_scale(p_quat, p_scale); }
|
Basis(const Quaternion &p_quaternion, const Vector3 &p_scale) { set_quaternion_scale(p_quaternion, p_scale); }
|
||||||
|
|
||||||
Basis(const Vector3 &p_euler) { set_euler(p_euler); }
|
Basis(const Vector3 &p_euler) { set_euler(p_euler); }
|
||||||
Basis(const Vector3 &p_euler, const Vector3 &p_scale) { set_euler_scale(p_euler, p_scale); }
|
Basis(const Vector3 &p_euler, const Vector3 &p_scale) { set_euler_scale(p_euler, p_scale); }
|
||||||
|
@ -88,8 +88,8 @@ Variant fieldwise_assign(const Variant &p_target, const Variant &p_source, const
|
|||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
case Variant::QUAT: {
|
case Variant::QUATERNION: {
|
||||||
SETUP_TYPE(Quat)
|
SETUP_TYPE(Quaternion)
|
||||||
|
|
||||||
/**/ TRY_TRANSFER_FIELD("x", x)
|
/**/ TRY_TRANSFER_FIELD("x", x)
|
||||||
else TRY_TRANSFER_FIELD("y", y)
|
else TRY_TRANSFER_FIELD("y", y)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* quat.cpp */
|
/* quaternion.cpp */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,7 +28,7 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "quat.h"
|
#include "quaternion.h"
|
||||||
|
|
||||||
#include "core/math/basis.h"
|
#include "core/math/basis.h"
|
||||||
#include "core/string/print_string.h"
|
#include "core/string/print_string.h"
|
||||||
@ -37,7 +37,7 @@
|
|||||||
// (ax,ay,az), where ax is the angle of rotation around x axis,
|
// (ax,ay,az), where ax is the angle of rotation around x axis,
|
||||||
// and similar for other axes.
|
// and similar for other axes.
|
||||||
// This implementation uses XYZ convention (Z is the first rotation).
|
// This implementation uses XYZ convention (Z is the first rotation).
|
||||||
Vector3 Quat::get_euler_xyz() const {
|
Vector3 Quaternion::get_euler_xyz() const {
|
||||||
Basis m(*this);
|
Basis m(*this);
|
||||||
return m.get_euler_xyz();
|
return m.get_euler_xyz();
|
||||||
}
|
}
|
||||||
@ -46,7 +46,7 @@ Vector3 Quat::get_euler_xyz() const {
|
|||||||
// (ax,ay,az), where ax is the angle of rotation around x axis,
|
// (ax,ay,az), where ax is the angle of rotation around x axis,
|
||||||
// and similar for other axes.
|
// and similar for other axes.
|
||||||
// This implementation uses YXZ convention (Z is the first rotation).
|
// This implementation uses YXZ convention (Z is the first rotation).
|
||||||
Vector3 Quat::get_euler_yxz() const {
|
Vector3 Quaternion::get_euler_yxz() const {
|
||||||
#ifdef MATH_CHECKS
|
#ifdef MATH_CHECKS
|
||||||
ERR_FAIL_COND_V_MSG(!is_normalized(), Vector3(0, 0, 0), "The quaternion must be normalized.");
|
ERR_FAIL_COND_V_MSG(!is_normalized(), Vector3(0, 0, 0), "The quaternion must be normalized.");
|
||||||
#endif
|
#endif
|
||||||
@ -54,7 +54,7 @@ Vector3 Quat::get_euler_yxz() const {
|
|||||||
return m.get_euler_yxz();
|
return m.get_euler_yxz();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Quat::operator*=(const Quat &p_q) {
|
void Quaternion::operator*=(const Quaternion &p_q) {
|
||||||
real_t xx = w * p_q.x + x * p_q.w + y * p_q.z - z * p_q.y;
|
real_t xx = w * p_q.x + x * p_q.w + y * p_q.z - z * p_q.y;
|
||||||
real_t yy = w * p_q.y + y * p_q.w + z * p_q.x - x * p_q.z;
|
real_t yy = w * p_q.y + y * p_q.w + z * p_q.x - x * p_q.z;
|
||||||
real_t zz = w * p_q.z + z * p_q.w + x * p_q.y - y * p_q.x;
|
real_t zz = w * p_q.z + z * p_q.w + x * p_q.y - y * p_q.x;
|
||||||
@ -64,45 +64,45 @@ void Quat::operator*=(const Quat &p_q) {
|
|||||||
z = zz;
|
z = zz;
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat Quat::operator*(const Quat &p_q) const {
|
Quaternion Quaternion::operator*(const Quaternion &p_q) const {
|
||||||
Quat r = *this;
|
Quaternion r = *this;
|
||||||
r *= p_q;
|
r *= p_q;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Quat::is_equal_approx(const Quat &p_quat) const {
|
bool Quaternion::is_equal_approx(const Quaternion &p_quaternion) const {
|
||||||
return Math::is_equal_approx(x, p_quat.x) && Math::is_equal_approx(y, p_quat.y) && Math::is_equal_approx(z, p_quat.z) && Math::is_equal_approx(w, p_quat.w);
|
return Math::is_equal_approx(x, p_quaternion.x) && Math::is_equal_approx(y, p_quaternion.y) && Math::is_equal_approx(z, p_quaternion.z) && Math::is_equal_approx(w, p_quaternion.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
real_t Quat::length() const {
|
real_t Quaternion::length() const {
|
||||||
return Math::sqrt(length_squared());
|
return Math::sqrt(length_squared());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Quat::normalize() {
|
void Quaternion::normalize() {
|
||||||
*this /= length();
|
*this /= length();
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat Quat::normalized() const {
|
Quaternion Quaternion::normalized() const {
|
||||||
return *this / length();
|
return *this / length();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Quat::is_normalized() const {
|
bool Quaternion::is_normalized() const {
|
||||||
return Math::is_equal_approx(length_squared(), 1, (real_t)UNIT_EPSILON); //use less epsilon
|
return Math::is_equal_approx(length_squared(), 1, (real_t)UNIT_EPSILON); //use less epsilon
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat Quat::inverse() const {
|
Quaternion Quaternion::inverse() const {
|
||||||
#ifdef MATH_CHECKS
|
#ifdef MATH_CHECKS
|
||||||
ERR_FAIL_COND_V_MSG(!is_normalized(), Quat(), "The quaternion must be normalized.");
|
ERR_FAIL_COND_V_MSG(!is_normalized(), Quaternion(), "The quaternion must be normalized.");
|
||||||
#endif
|
#endif
|
||||||
return Quat(-x, -y, -z, w);
|
return Quaternion(-x, -y, -z, w);
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat Quat::slerp(const Quat &p_to, const real_t &p_weight) const {
|
Quaternion Quaternion::slerp(const Quaternion &p_to, const real_t &p_weight) const {
|
||||||
#ifdef MATH_CHECKS
|
#ifdef MATH_CHECKS
|
||||||
ERR_FAIL_COND_V_MSG(!is_normalized(), Quat(), "The start quaternion must be normalized.");
|
ERR_FAIL_COND_V_MSG(!is_normalized(), Quaternion(), "The start quaternion must be normalized.");
|
||||||
ERR_FAIL_COND_V_MSG(!p_to.is_normalized(), Quat(), "The end quaternion must be normalized.");
|
ERR_FAIL_COND_V_MSG(!p_to.is_normalized(), Quaternion(), "The end quaternion must be normalized.");
|
||||||
#endif
|
#endif
|
||||||
Quat to1;
|
Quaternion to1;
|
||||||
real_t omega, cosom, sinom, scale0, scale1;
|
real_t omega, cosom, sinom, scale0, scale1;
|
||||||
|
|
||||||
// calc cosine
|
// calc cosine
|
||||||
@ -137,19 +137,19 @@ Quat Quat::slerp(const Quat &p_to, const real_t &p_weight) const {
|
|||||||
scale1 = p_weight;
|
scale1 = p_weight;
|
||||||
}
|
}
|
||||||
// calculate final values
|
// calculate final values
|
||||||
return Quat(
|
return Quaternion(
|
||||||
scale0 * x + scale1 * to1.x,
|
scale0 * x + scale1 * to1.x,
|
||||||
scale0 * y + scale1 * to1.y,
|
scale0 * y + scale1 * to1.y,
|
||||||
scale0 * z + scale1 * to1.z,
|
scale0 * z + scale1 * to1.z,
|
||||||
scale0 * w + scale1 * to1.w);
|
scale0 * w + scale1 * to1.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat Quat::slerpni(const Quat &p_to, const real_t &p_weight) const {
|
Quaternion Quaternion::slerpni(const Quaternion &p_to, const real_t &p_weight) const {
|
||||||
#ifdef MATH_CHECKS
|
#ifdef MATH_CHECKS
|
||||||
ERR_FAIL_COND_V_MSG(!is_normalized(), Quat(), "The start quaternion must be normalized.");
|
ERR_FAIL_COND_V_MSG(!is_normalized(), Quaternion(), "The start quaternion must be normalized.");
|
||||||
ERR_FAIL_COND_V_MSG(!p_to.is_normalized(), Quat(), "The end quaternion must be normalized.");
|
ERR_FAIL_COND_V_MSG(!p_to.is_normalized(), Quaternion(), "The end quaternion must be normalized.");
|
||||||
#endif
|
#endif
|
||||||
const Quat &from = *this;
|
const Quaternion &from = *this;
|
||||||
|
|
||||||
real_t dot = from.dot(p_to);
|
real_t dot = from.dot(p_to);
|
||||||
|
|
||||||
@ -162,29 +162,29 @@ Quat Quat::slerpni(const Quat &p_to, const real_t &p_weight) const {
|
|||||||
newFactor = Math::sin(p_weight * theta) * sinT,
|
newFactor = Math::sin(p_weight * theta) * sinT,
|
||||||
invFactor = Math::sin((1.0 - p_weight) * theta) * sinT;
|
invFactor = Math::sin((1.0 - p_weight) * theta) * sinT;
|
||||||
|
|
||||||
return Quat(invFactor * from.x + newFactor * p_to.x,
|
return Quaternion(invFactor * from.x + newFactor * p_to.x,
|
||||||
invFactor * from.y + newFactor * p_to.y,
|
invFactor * from.y + newFactor * p_to.y,
|
||||||
invFactor * from.z + newFactor * p_to.z,
|
invFactor * from.z + newFactor * p_to.z,
|
||||||
invFactor * from.w + newFactor * p_to.w);
|
invFactor * from.w + newFactor * p_to.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat Quat::cubic_slerp(const Quat &p_b, const Quat &p_pre_a, const Quat &p_post_b, const real_t &p_weight) const {
|
Quaternion Quaternion::cubic_slerp(const Quaternion &p_b, const Quaternion &p_pre_a, const Quaternion &p_post_b, const real_t &p_weight) const {
|
||||||
#ifdef MATH_CHECKS
|
#ifdef MATH_CHECKS
|
||||||
ERR_FAIL_COND_V_MSG(!is_normalized(), Quat(), "The start quaternion must be normalized.");
|
ERR_FAIL_COND_V_MSG(!is_normalized(), Quaternion(), "The start quaternion must be normalized.");
|
||||||
ERR_FAIL_COND_V_MSG(!p_b.is_normalized(), Quat(), "The end quaternion must be normalized.");
|
ERR_FAIL_COND_V_MSG(!p_b.is_normalized(), Quaternion(), "The end quaternion must be normalized.");
|
||||||
#endif
|
#endif
|
||||||
//the only way to do slerp :|
|
//the only way to do slerp :|
|
||||||
real_t t2 = (1.0 - p_weight) * p_weight * 2;
|
real_t t2 = (1.0 - p_weight) * p_weight * 2;
|
||||||
Quat sp = this->slerp(p_b, p_weight);
|
Quaternion sp = this->slerp(p_b, p_weight);
|
||||||
Quat sq = p_pre_a.slerpni(p_post_b, p_weight);
|
Quaternion sq = p_pre_a.slerpni(p_post_b, p_weight);
|
||||||
return sp.slerpni(sq, t2);
|
return sp.slerpni(sq, t2);
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat::operator String() const {
|
Quaternion::operator String() const {
|
||||||
return String::num(x) + ", " + String::num(y) + ", " + String::num(z) + ", " + String::num(w);
|
return String::num(x) + ", " + String::num(y) + ", " + String::num(z) + ", " + String::num(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat::Quat(const Vector3 &p_axis, real_t p_angle) {
|
Quaternion::Quaternion(const Vector3 &p_axis, real_t p_angle) {
|
||||||
#ifdef MATH_CHECKS
|
#ifdef MATH_CHECKS
|
||||||
ERR_FAIL_COND_MSG(!p_axis.is_normalized(), "The axis Vector3 must be normalized.");
|
ERR_FAIL_COND_MSG(!p_axis.is_normalized(), "The axis Vector3 must be normalized.");
|
||||||
#endif
|
#endif
|
||||||
@ -209,7 +209,7 @@ Quat::Quat(const Vector3 &p_axis, real_t p_angle) {
|
|||||||
// (ax, ay, az), where ax is the angle of rotation around x axis,
|
// (ax, ay, az), where ax is the angle of rotation around x axis,
|
||||||
// and similar for other axes.
|
// and similar for other axes.
|
||||||
// This implementation uses YXZ convention (Z is the first rotation).
|
// This implementation uses YXZ convention (Z is the first rotation).
|
||||||
Quat::Quat(const Vector3 &p_euler) {
|
Quaternion::Quaternion(const Vector3 &p_euler) {
|
||||||
real_t half_a1 = p_euler.y * 0.5;
|
real_t half_a1 = p_euler.y * 0.5;
|
||||||
real_t half_a2 = p_euler.x * 0.5;
|
real_t half_a2 = p_euler.x * 0.5;
|
||||||
real_t half_a3 = p_euler.z * 0.5;
|
real_t half_a3 = p_euler.z * 0.5;
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* quat.h */
|
/* quaternion.h */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -36,7 +36,7 @@
|
|||||||
#include "core/math/vector3.h"
|
#include "core/math/vector3.h"
|
||||||
#include "core/string/ustring.h"
|
#include "core/string/ustring.h"
|
||||||
|
|
||||||
class Quat {
|
class Quaternion {
|
||||||
public:
|
public:
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
@ -55,21 +55,21 @@ public:
|
|||||||
return components[idx];
|
return components[idx];
|
||||||
}
|
}
|
||||||
_FORCE_INLINE_ real_t length_squared() const;
|
_FORCE_INLINE_ real_t length_squared() const;
|
||||||
bool is_equal_approx(const Quat &p_quat) const;
|
bool is_equal_approx(const Quaternion &p_quaternion) const;
|
||||||
real_t length() const;
|
real_t length() const;
|
||||||
void normalize();
|
void normalize();
|
||||||
Quat normalized() const;
|
Quaternion normalized() const;
|
||||||
bool is_normalized() const;
|
bool is_normalized() const;
|
||||||
Quat inverse() const;
|
Quaternion inverse() const;
|
||||||
_FORCE_INLINE_ real_t dot(const Quat &p_q) const;
|
_FORCE_INLINE_ real_t dot(const Quaternion &p_q) const;
|
||||||
|
|
||||||
Vector3 get_euler_xyz() const;
|
Vector3 get_euler_xyz() const;
|
||||||
Vector3 get_euler_yxz() const;
|
Vector3 get_euler_yxz() const;
|
||||||
Vector3 get_euler() const { return get_euler_yxz(); };
|
Vector3 get_euler() const { return get_euler_yxz(); };
|
||||||
|
|
||||||
Quat slerp(const Quat &p_to, const real_t &p_weight) const;
|
Quaternion slerp(const Quaternion &p_to, const real_t &p_weight) const;
|
||||||
Quat slerpni(const Quat &p_to, const real_t &p_weight) const;
|
Quaternion slerpni(const Quaternion &p_to, const real_t &p_weight) const;
|
||||||
Quat cubic_slerp(const Quat &p_b, const Quat &p_pre_a, const Quat &p_post_b, const real_t &p_weight) const;
|
Quaternion cubic_slerp(const Quaternion &p_b, const Quaternion &p_pre_a, const Quaternion &p_post_b, const real_t &p_weight) const;
|
||||||
|
|
||||||
_FORCE_INLINE_ void get_axis_angle(Vector3 &r_axis, real_t &r_angle) const {
|
_FORCE_INLINE_ void get_axis_angle(Vector3 &r_axis, real_t &r_angle) const {
|
||||||
r_angle = 2 * Math::acos(w);
|
r_angle = 2 * Math::acos(w);
|
||||||
@ -79,11 +79,11 @@ public:
|
|||||||
r_axis.z = z * r;
|
r_axis.z = z * r;
|
||||||
}
|
}
|
||||||
|
|
||||||
void operator*=(const Quat &p_q);
|
void operator*=(const Quaternion &p_q);
|
||||||
Quat operator*(const Quat &p_q) const;
|
Quaternion operator*(const Quaternion &p_q) const;
|
||||||
|
|
||||||
Quat operator*(const Vector3 &v) const {
|
Quaternion operator*(const Vector3 &v) const {
|
||||||
return Quat(w * v.x + y * v.z - z * v.y,
|
return Quaternion(w * v.x + y * v.z - z * v.y,
|
||||||
w * v.y + z * v.x - x * v.z,
|
w * v.y + z * v.x - x * v.z,
|
||||||
w * v.z + x * v.y - y * v.x,
|
w * v.z + x * v.y - y * v.x,
|
||||||
-x * v.x - y * v.y - z * v.z);
|
-x * v.x - y * v.y - z * v.z);
|
||||||
@ -102,42 +102,42 @@ public:
|
|||||||
return inverse().xform(v);
|
return inverse().xform(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
_FORCE_INLINE_ void operator+=(const Quat &p_q);
|
_FORCE_INLINE_ void operator+=(const Quaternion &p_q);
|
||||||
_FORCE_INLINE_ void operator-=(const Quat &p_q);
|
_FORCE_INLINE_ void operator-=(const Quaternion &p_q);
|
||||||
_FORCE_INLINE_ void operator*=(const real_t &s);
|
_FORCE_INLINE_ void operator*=(const real_t &s);
|
||||||
_FORCE_INLINE_ void operator/=(const real_t &s);
|
_FORCE_INLINE_ void operator/=(const real_t &s);
|
||||||
_FORCE_INLINE_ Quat operator+(const Quat &q2) const;
|
_FORCE_INLINE_ Quaternion operator+(const Quaternion &q2) const;
|
||||||
_FORCE_INLINE_ Quat operator-(const Quat &q2) const;
|
_FORCE_INLINE_ Quaternion operator-(const Quaternion &q2) const;
|
||||||
_FORCE_INLINE_ Quat operator-() const;
|
_FORCE_INLINE_ Quaternion operator-() const;
|
||||||
_FORCE_INLINE_ Quat operator*(const real_t &s) const;
|
_FORCE_INLINE_ Quaternion operator*(const real_t &s) const;
|
||||||
_FORCE_INLINE_ Quat operator/(const real_t &s) const;
|
_FORCE_INLINE_ Quaternion operator/(const real_t &s) const;
|
||||||
|
|
||||||
_FORCE_INLINE_ bool operator==(const Quat &p_quat) const;
|
_FORCE_INLINE_ bool operator==(const Quaternion &p_quaternion) const;
|
||||||
_FORCE_INLINE_ bool operator!=(const Quat &p_quat) const;
|
_FORCE_INLINE_ bool operator!=(const Quaternion &p_quaternion) const;
|
||||||
|
|
||||||
operator String() const;
|
operator String() const;
|
||||||
|
|
||||||
_FORCE_INLINE_ Quat() {}
|
_FORCE_INLINE_ Quaternion() {}
|
||||||
|
|
||||||
_FORCE_INLINE_ Quat(real_t p_x, real_t p_y, real_t p_z, real_t p_w) :
|
_FORCE_INLINE_ Quaternion(real_t p_x, real_t p_y, real_t p_z, real_t p_w) :
|
||||||
x(p_x),
|
x(p_x),
|
||||||
y(p_y),
|
y(p_y),
|
||||||
z(p_z),
|
z(p_z),
|
||||||
w(p_w) {
|
w(p_w) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat(const Vector3 &p_axis, real_t p_angle);
|
Quaternion(const Vector3 &p_axis, real_t p_angle);
|
||||||
|
|
||||||
Quat(const Vector3 &p_euler);
|
Quaternion(const Vector3 &p_euler);
|
||||||
|
|
||||||
Quat(const Quat &p_q) :
|
Quaternion(const Quaternion &p_q) :
|
||||||
x(p_q.x),
|
x(p_q.x),
|
||||||
y(p_q.y),
|
y(p_q.y),
|
||||||
z(p_q.z),
|
z(p_q.z),
|
||||||
w(p_q.w) {
|
w(p_q.w) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat &operator=(const Quat &p_q) {
|
Quaternion &operator=(const Quaternion &p_q) {
|
||||||
x = p_q.x;
|
x = p_q.x;
|
||||||
y = p_q.y;
|
y = p_q.y;
|
||||||
z = p_q.z;
|
z = p_q.z;
|
||||||
@ -145,7 +145,7 @@ public:
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat(const Vector3 &v0, const Vector3 &v1) // shortest arc
|
Quaternion(const Vector3 &v0, const Vector3 &v1) // shortest arc
|
||||||
{
|
{
|
||||||
Vector3 c = v0.cross(v1);
|
Vector3 c = v0.cross(v1);
|
||||||
real_t d = v0.dot(v1);
|
real_t d = v0.dot(v1);
|
||||||
@ -167,72 +167,72 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
real_t Quat::dot(const Quat &p_q) const {
|
real_t Quaternion::dot(const Quaternion &p_q) const {
|
||||||
return x * p_q.x + y * p_q.y + z * p_q.z + w * p_q.w;
|
return x * p_q.x + y * p_q.y + z * p_q.z + w * p_q.w;
|
||||||
}
|
}
|
||||||
|
|
||||||
real_t Quat::length_squared() const {
|
real_t Quaternion::length_squared() const {
|
||||||
return dot(*this);
|
return dot(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Quat::operator+=(const Quat &p_q) {
|
void Quaternion::operator+=(const Quaternion &p_q) {
|
||||||
x += p_q.x;
|
x += p_q.x;
|
||||||
y += p_q.y;
|
y += p_q.y;
|
||||||
z += p_q.z;
|
z += p_q.z;
|
||||||
w += p_q.w;
|
w += p_q.w;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Quat::operator-=(const Quat &p_q) {
|
void Quaternion::operator-=(const Quaternion &p_q) {
|
||||||
x -= p_q.x;
|
x -= p_q.x;
|
||||||
y -= p_q.y;
|
y -= p_q.y;
|
||||||
z -= p_q.z;
|
z -= p_q.z;
|
||||||
w -= p_q.w;
|
w -= p_q.w;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Quat::operator*=(const real_t &s) {
|
void Quaternion::operator*=(const real_t &s) {
|
||||||
x *= s;
|
x *= s;
|
||||||
y *= s;
|
y *= s;
|
||||||
z *= s;
|
z *= s;
|
||||||
w *= s;
|
w *= s;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Quat::operator/=(const real_t &s) {
|
void Quaternion::operator/=(const real_t &s) {
|
||||||
*this *= 1.0 / s;
|
*this *= 1.0 / s;
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat Quat::operator+(const Quat &q2) const {
|
Quaternion Quaternion::operator+(const Quaternion &q2) const {
|
||||||
const Quat &q1 = *this;
|
const Quaternion &q1 = *this;
|
||||||
return Quat(q1.x + q2.x, q1.y + q2.y, q1.z + q2.z, q1.w + q2.w);
|
return Quaternion(q1.x + q2.x, q1.y + q2.y, q1.z + q2.z, q1.w + q2.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat Quat::operator-(const Quat &q2) const {
|
Quaternion Quaternion::operator-(const Quaternion &q2) const {
|
||||||
const Quat &q1 = *this;
|
const Quaternion &q1 = *this;
|
||||||
return Quat(q1.x - q2.x, q1.y - q2.y, q1.z - q2.z, q1.w - q2.w);
|
return Quaternion(q1.x - q2.x, q1.y - q2.y, q1.z - q2.z, q1.w - q2.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat Quat::operator-() const {
|
Quaternion Quaternion::operator-() const {
|
||||||
const Quat &q2 = *this;
|
const Quaternion &q2 = *this;
|
||||||
return Quat(-q2.x, -q2.y, -q2.z, -q2.w);
|
return Quaternion(-q2.x, -q2.y, -q2.z, -q2.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat Quat::operator*(const real_t &s) const {
|
Quaternion Quaternion::operator*(const real_t &s) const {
|
||||||
return Quat(x * s, y * s, z * s, w * s);
|
return Quaternion(x * s, y * s, z * s, w * s);
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat Quat::operator/(const real_t &s) const {
|
Quaternion Quaternion::operator/(const real_t &s) const {
|
||||||
return *this * (1.0 / s);
|
return *this * (1.0 / s);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Quat::operator==(const Quat &p_quat) const {
|
bool Quaternion::operator==(const Quaternion &p_quaternion) const {
|
||||||
return x == p_quat.x && y == p_quat.y && z == p_quat.z && w == p_quat.w;
|
return x == p_quaternion.x && y == p_quaternion.y && z == p_quaternion.z && w == p_quaternion.w;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Quat::operator!=(const Quat &p_quat) const {
|
bool Quaternion::operator!=(const Quaternion &p_quaternion) const {
|
||||||
return x != p_quat.x || y != p_quat.y || z != p_quat.z || w != p_quat.w;
|
return x != p_quaternion.x || y != p_quaternion.y || z != p_quaternion.z || w != p_quaternion.w;
|
||||||
}
|
}
|
||||||
|
|
||||||
_FORCE_INLINE_ Quat operator*(const real_t &p_real, const Quat &p_quat) {
|
_FORCE_INLINE_ Quaternion operator*(const real_t &p_real, const Quaternion &p_quaternion) {
|
||||||
return p_quat * p_real;
|
return p_quaternion * p_real;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // QUAT_H
|
#endif // QUAT_H
|
@ -112,15 +112,15 @@ Transform3D Transform3D::interpolate_with(const Transform3D &p_transform, real_t
|
|||||||
/* not sure if very "efficient" but good enough? */
|
/* not sure if very "efficient" but good enough? */
|
||||||
|
|
||||||
Vector3 src_scale = basis.get_scale();
|
Vector3 src_scale = basis.get_scale();
|
||||||
Quat src_rot = basis.get_rotation_quat();
|
Quaternion src_rot = basis.get_rotation_quaternion();
|
||||||
Vector3 src_loc = origin;
|
Vector3 src_loc = origin;
|
||||||
|
|
||||||
Vector3 dst_scale = p_transform.basis.get_scale();
|
Vector3 dst_scale = p_transform.basis.get_scale();
|
||||||
Quat dst_rot = p_transform.basis.get_rotation_quat();
|
Quaternion dst_rot = p_transform.basis.get_rotation_quaternion();
|
||||||
Vector3 dst_loc = p_transform.origin;
|
Vector3 dst_loc = p_transform.origin;
|
||||||
|
|
||||||
Transform3D interp;
|
Transform3D interp;
|
||||||
interp.basis.set_quat_scale(src_rot.slerp(dst_rot, p_c).normalized(), src_scale.lerp(dst_scale, p_c));
|
interp.basis.set_quaternion_scale(src_rot.slerp(dst_rot, p_c).normalized(), src_scale.lerp(dst_scale, p_c));
|
||||||
interp.origin = src_loc.lerp(dst_loc, p_c);
|
interp.origin = src_loc.lerp(dst_loc, p_c);
|
||||||
|
|
||||||
return interp;
|
return interp;
|
||||||
|
@ -122,7 +122,7 @@ MAKE_PTRARG_BY_REFERENCE(Vector3);
|
|||||||
MAKE_PTRARG_BY_REFERENCE(Vector3i);
|
MAKE_PTRARG_BY_REFERENCE(Vector3i);
|
||||||
MAKE_PTRARG(Transform2D);
|
MAKE_PTRARG(Transform2D);
|
||||||
MAKE_PTRARG_BY_REFERENCE(Plane);
|
MAKE_PTRARG_BY_REFERENCE(Plane);
|
||||||
MAKE_PTRARG(Quat);
|
MAKE_PTRARG(Quaternion);
|
||||||
MAKE_PTRARG_BY_REFERENCE(AABB);
|
MAKE_PTRARG_BY_REFERENCE(AABB);
|
||||||
MAKE_PTRARG_BY_REFERENCE(Basis);
|
MAKE_PTRARG_BY_REFERENCE(Basis);
|
||||||
MAKE_PTRARG_BY_REFERENCE(Transform3D);
|
MAKE_PTRARG_BY_REFERENCE(Transform3D);
|
||||||
|
@ -146,7 +146,7 @@ MAKE_TYPE_INFO(Rect2i, Variant::RECT2I)
|
|||||||
MAKE_TYPE_INFO(Vector3i, Variant::VECTOR3I)
|
MAKE_TYPE_INFO(Vector3i, Variant::VECTOR3I)
|
||||||
MAKE_TYPE_INFO(Transform2D, Variant::TRANSFORM2D)
|
MAKE_TYPE_INFO(Transform2D, Variant::TRANSFORM2D)
|
||||||
MAKE_TYPE_INFO(Plane, Variant::PLANE)
|
MAKE_TYPE_INFO(Plane, Variant::PLANE)
|
||||||
MAKE_TYPE_INFO(Quat, Variant::QUAT)
|
MAKE_TYPE_INFO(Quaternion, Variant::QUATERNION)
|
||||||
MAKE_TYPE_INFO(AABB, Variant::AABB)
|
MAKE_TYPE_INFO(AABB, Variant::AABB)
|
||||||
MAKE_TYPE_INFO(Basis, Variant::BASIS)
|
MAKE_TYPE_INFO(Basis, Variant::BASIS)
|
||||||
MAKE_TYPE_INFO(Transform3D, Variant::TRANSFORM3D)
|
MAKE_TYPE_INFO(Transform3D, Variant::TRANSFORM3D)
|
||||||
|
@ -98,7 +98,7 @@ MAKE_TYPED_ARRAY(Vector3, Variant::VECTOR3)
|
|||||||
MAKE_TYPED_ARRAY(Vector3i, Variant::VECTOR3I)
|
MAKE_TYPED_ARRAY(Vector3i, Variant::VECTOR3I)
|
||||||
MAKE_TYPED_ARRAY(Transform2D, Variant::TRANSFORM2D)
|
MAKE_TYPED_ARRAY(Transform2D, Variant::TRANSFORM2D)
|
||||||
MAKE_TYPED_ARRAY(Plane, Variant::PLANE)
|
MAKE_TYPED_ARRAY(Plane, Variant::PLANE)
|
||||||
MAKE_TYPED_ARRAY(Quat, Variant::QUAT)
|
MAKE_TYPED_ARRAY(Quaternion, Variant::QUATERNION)
|
||||||
MAKE_TYPED_ARRAY(AABB, Variant::AABB)
|
MAKE_TYPED_ARRAY(AABB, Variant::AABB)
|
||||||
MAKE_TYPED_ARRAY(Basis, Variant::BASIS)
|
MAKE_TYPED_ARRAY(Basis, Variant::BASIS)
|
||||||
MAKE_TYPED_ARRAY(Transform3D, Variant::TRANSFORM3D)
|
MAKE_TYPED_ARRAY(Transform3D, Variant::TRANSFORM3D)
|
||||||
@ -196,7 +196,7 @@ MAKE_TYPED_ARRAY_INFO(Vector3, Variant::VECTOR3)
|
|||||||
MAKE_TYPED_ARRAY_INFO(Vector3i, Variant::VECTOR3I)
|
MAKE_TYPED_ARRAY_INFO(Vector3i, Variant::VECTOR3I)
|
||||||
MAKE_TYPED_ARRAY_INFO(Transform2D, Variant::TRANSFORM2D)
|
MAKE_TYPED_ARRAY_INFO(Transform2D, Variant::TRANSFORM2D)
|
||||||
MAKE_TYPED_ARRAY_INFO(Plane, Variant::PLANE)
|
MAKE_TYPED_ARRAY_INFO(Plane, Variant::PLANE)
|
||||||
MAKE_TYPED_ARRAY_INFO(Quat, Variant::QUAT)
|
MAKE_TYPED_ARRAY_INFO(Quaternion, Variant::QUATERNION)
|
||||||
MAKE_TYPED_ARRAY_INFO(AABB, Variant::AABB)
|
MAKE_TYPED_ARRAY_INFO(AABB, Variant::AABB)
|
||||||
MAKE_TYPED_ARRAY_INFO(Basis, Variant::BASIS)
|
MAKE_TYPED_ARRAY_INFO(Basis, Variant::BASIS)
|
||||||
MAKE_TYPED_ARRAY_INFO(Transform3D, Variant::TRANSFORM3D)
|
MAKE_TYPED_ARRAY_INFO(Transform3D, Variant::TRANSFORM3D)
|
||||||
|
@ -91,8 +91,8 @@ String Variant::get_type_name(Variant::Type p_type) {
|
|||||||
case AABB: {
|
case AABB: {
|
||||||
return "AABB";
|
return "AABB";
|
||||||
} break;
|
} break;
|
||||||
case QUAT: {
|
case QUATERNION: {
|
||||||
return "Quat";
|
return "Quaternion";
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case BASIS: {
|
case BASIS: {
|
||||||
@ -300,7 +300,7 @@ bool Variant::can_convert(Variant::Type p_type_from, Variant::Type p_type_to) {
|
|||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case QUAT: {
|
case QUATERNION: {
|
||||||
static const Type valid[] = {
|
static const Type valid[] = {
|
||||||
BASIS,
|
BASIS,
|
||||||
NIL
|
NIL
|
||||||
@ -311,7 +311,7 @@ bool Variant::can_convert(Variant::Type p_type_from, Variant::Type p_type_to) {
|
|||||||
} break;
|
} break;
|
||||||
case BASIS: {
|
case BASIS: {
|
||||||
static const Type valid[] = {
|
static const Type valid[] = {
|
||||||
QUAT,
|
QUATERNION,
|
||||||
VECTOR3,
|
VECTOR3,
|
||||||
NIL
|
NIL
|
||||||
};
|
};
|
||||||
@ -322,7 +322,7 @@ bool Variant::can_convert(Variant::Type p_type_from, Variant::Type p_type_to) {
|
|||||||
case TRANSFORM3D: {
|
case TRANSFORM3D: {
|
||||||
static const Type valid[] = {
|
static const Type valid[] = {
|
||||||
TRANSFORM2D,
|
TRANSFORM2D,
|
||||||
QUAT,
|
QUATERNION,
|
||||||
BASIS,
|
BASIS,
|
||||||
NIL
|
NIL
|
||||||
};
|
};
|
||||||
@ -607,7 +607,7 @@ bool Variant::can_convert_strict(Variant::Type p_type_from, Variant::Type p_type
|
|||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case QUAT: {
|
case QUATERNION: {
|
||||||
static const Type valid[] = {
|
static const Type valid[] = {
|
||||||
BASIS,
|
BASIS,
|
||||||
NIL
|
NIL
|
||||||
@ -618,7 +618,7 @@ bool Variant::can_convert_strict(Variant::Type p_type_from, Variant::Type p_type
|
|||||||
} break;
|
} break;
|
||||||
case BASIS: {
|
case BASIS: {
|
||||||
static const Type valid[] = {
|
static const Type valid[] = {
|
||||||
QUAT,
|
QUATERNION,
|
||||||
VECTOR3,
|
VECTOR3,
|
||||||
NIL
|
NIL
|
||||||
};
|
};
|
||||||
@ -629,7 +629,7 @@ bool Variant::can_convert_strict(Variant::Type p_type_from, Variant::Type p_type
|
|||||||
case TRANSFORM3D: {
|
case TRANSFORM3D: {
|
||||||
static const Type valid[] = {
|
static const Type valid[] = {
|
||||||
TRANSFORM2D,
|
TRANSFORM2D,
|
||||||
QUAT,
|
QUATERNION,
|
||||||
BASIS,
|
BASIS,
|
||||||
NIL
|
NIL
|
||||||
};
|
};
|
||||||
@ -873,8 +873,8 @@ bool Variant::is_zero() const {
|
|||||||
case AABB: {
|
case AABB: {
|
||||||
return *_data._aabb == ::AABB();
|
return *_data._aabb == ::AABB();
|
||||||
} break;
|
} break;
|
||||||
case QUAT: {
|
case QUATERNION: {
|
||||||
return *reinterpret_cast<const Quat *>(_data._mem) == Quat();
|
return *reinterpret_cast<const Quaternion *>(_data._mem) == Quaternion();
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case BASIS: {
|
case BASIS: {
|
||||||
@ -1092,8 +1092,8 @@ void Variant::reference(const Variant &p_variant) {
|
|||||||
case AABB: {
|
case AABB: {
|
||||||
_data._aabb = memnew(::AABB(*p_variant._data._aabb));
|
_data._aabb = memnew(::AABB(*p_variant._data._aabb));
|
||||||
} break;
|
} break;
|
||||||
case QUAT: {
|
case QUATERNION: {
|
||||||
memnew_placement(_data._mem, Quat(*reinterpret_cast<const Quat *>(p_variant._data._mem)));
|
memnew_placement(_data._mem, Quaternion(*reinterpret_cast<const Quaternion *>(p_variant._data._mem)));
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case BASIS: {
|
case BASIS: {
|
||||||
@ -1254,8 +1254,8 @@ void Variant::zero() {
|
|||||||
case PLANE:
|
case PLANE:
|
||||||
*reinterpret_cast<Plane *>(this->_data._mem) = Plane();
|
*reinterpret_cast<Plane *>(this->_data._mem) = Plane();
|
||||||
break;
|
break;
|
||||||
case QUAT:
|
case QUATERNION:
|
||||||
*reinterpret_cast<Quat *>(this->_data._mem) = Quat();
|
*reinterpret_cast<Quaternion *>(this->_data._mem) = Quaternion();
|
||||||
break;
|
break;
|
||||||
case COLOR:
|
case COLOR:
|
||||||
*reinterpret_cast<Color *>(this->_data._mem) = Color();
|
*reinterpret_cast<Color *>(this->_data._mem) = Color();
|
||||||
@ -1275,7 +1275,7 @@ void Variant::_clear_internal() {
|
|||||||
// no point, they don't allocate memory
|
// no point, they don't allocate memory
|
||||||
VECTOR3,
|
VECTOR3,
|
||||||
PLANE,
|
PLANE,
|
||||||
QUAT,
|
QUATERNION,
|
||||||
COLOR,
|
COLOR,
|
||||||
VECTOR2,
|
VECTOR2,
|
||||||
RECT2
|
RECT2
|
||||||
@ -1653,11 +1653,10 @@ String Variant::stringify(List<const void *> &stack) const {
|
|||||||
return "(" + operator Vector3i() + ")";
|
return "(" + operator Vector3i() + ")";
|
||||||
case PLANE:
|
case PLANE:
|
||||||
return operator Plane();
|
return operator Plane();
|
||||||
//case QUAT:
|
|
||||||
case AABB:
|
case AABB:
|
||||||
return operator ::AABB();
|
return operator ::AABB();
|
||||||
case QUAT:
|
case QUATERNION:
|
||||||
return "(" + operator Quat() + ")";
|
return "(" + operator Quaternion() + ")";
|
||||||
case BASIS: {
|
case BASIS: {
|
||||||
Basis mat3 = operator Basis();
|
Basis mat3 = operator Basis();
|
||||||
|
|
||||||
@ -1956,8 +1955,8 @@ Variant::operator ::AABB() const {
|
|||||||
Variant::operator Basis() const {
|
Variant::operator Basis() const {
|
||||||
if (type == BASIS) {
|
if (type == BASIS) {
|
||||||
return *_data._basis;
|
return *_data._basis;
|
||||||
} else if (type == QUAT) {
|
} else if (type == QUATERNION) {
|
||||||
return *reinterpret_cast<const Quat *>(_data._mem);
|
return *reinterpret_cast<const Quaternion *>(_data._mem);
|
||||||
} else if (type == VECTOR3) {
|
} else if (type == VECTOR3) {
|
||||||
return Basis(*reinterpret_cast<const Vector3 *>(_data._mem));
|
return Basis(*reinterpret_cast<const Vector3 *>(_data._mem));
|
||||||
} else if (type == TRANSFORM3D) { // unexposed in Variant::can_convert?
|
} else if (type == TRANSFORM3D) { // unexposed in Variant::can_convert?
|
||||||
@ -1967,15 +1966,15 @@ Variant::operator Basis() const {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Variant::operator Quat() const {
|
Variant::operator Quaternion() const {
|
||||||
if (type == QUAT) {
|
if (type == QUATERNION) {
|
||||||
return *reinterpret_cast<const Quat *>(_data._mem);
|
return *reinterpret_cast<const Quaternion *>(_data._mem);
|
||||||
} else if (type == BASIS) {
|
} else if (type == BASIS) {
|
||||||
return *_data._basis;
|
return *_data._basis;
|
||||||
} else if (type == TRANSFORM3D) {
|
} else if (type == TRANSFORM3D) {
|
||||||
return _data._transform3d->basis;
|
return _data._transform3d->basis;
|
||||||
} else {
|
} else {
|
||||||
return Quat();
|
return Quaternion();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1984,8 +1983,8 @@ Variant::operator Transform3D() const {
|
|||||||
return *_data._transform3d;
|
return *_data._transform3d;
|
||||||
} else if (type == BASIS) {
|
} else if (type == BASIS) {
|
||||||
return Transform3D(*_data._basis, Vector3());
|
return Transform3D(*_data._basis, Vector3());
|
||||||
} else if (type == QUAT) {
|
} else if (type == QUATERNION) {
|
||||||
return Transform3D(Basis(*reinterpret_cast<const Quat *>(_data._mem)), Vector3());
|
return Transform3D(Basis(*reinterpret_cast<const Quaternion *>(_data._mem)), Vector3());
|
||||||
} else if (type == TRANSFORM2D) {
|
} else if (type == TRANSFORM2D) {
|
||||||
const Transform2D &t = *_data._transform2d;
|
const Transform2D &t = *_data._transform2d;
|
||||||
Transform3D m;
|
Transform3D m;
|
||||||
@ -2495,9 +2494,9 @@ Variant::Variant(const Basis &p_matrix) {
|
|||||||
_data._basis = memnew(Basis(p_matrix));
|
_data._basis = memnew(Basis(p_matrix));
|
||||||
}
|
}
|
||||||
|
|
||||||
Variant::Variant(const Quat &p_quat) {
|
Variant::Variant(const Quaternion &p_quaternion) {
|
||||||
type = QUAT;
|
type = QUATERNION;
|
||||||
memnew_placement(_data._mem, Quat(p_quat));
|
memnew_placement(_data._mem, Quaternion(p_quaternion));
|
||||||
}
|
}
|
||||||
|
|
||||||
Variant::Variant(const Transform3D &p_transform) {
|
Variant::Variant(const Transform3D &p_transform) {
|
||||||
@ -2739,8 +2738,8 @@ void Variant::operator=(const Variant &p_variant) {
|
|||||||
case AABB: {
|
case AABB: {
|
||||||
*_data._aabb = *(p_variant._data._aabb);
|
*_data._aabb = *(p_variant._data._aabb);
|
||||||
} break;
|
} break;
|
||||||
case QUAT: {
|
case QUATERNION: {
|
||||||
*reinterpret_cast<Quat *>(_data._mem) = *reinterpret_cast<const Quat *>(p_variant._data._mem);
|
*reinterpret_cast<Quaternion *>(_data._mem) = *reinterpret_cast<const Quaternion *>(p_variant._data._mem);
|
||||||
} break;
|
} break;
|
||||||
case BASIS: {
|
case BASIS: {
|
||||||
*_data._basis = *(p_variant._data._basis);
|
*_data._basis = *(p_variant._data._basis);
|
||||||
@ -2916,11 +2915,11 @@ uint32_t Variant::hash() const {
|
|||||||
return hash;
|
return hash;
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case QUAT: {
|
case QUATERNION: {
|
||||||
uint32_t hash = hash_djb2_one_float(reinterpret_cast<const Quat *>(_data._mem)->x);
|
uint32_t hash = hash_djb2_one_float(reinterpret_cast<const Quaternion *>(_data._mem)->x);
|
||||||
hash = hash_djb2_one_float(reinterpret_cast<const Quat *>(_data._mem)->y, hash);
|
hash = hash_djb2_one_float(reinterpret_cast<const Quaternion *>(_data._mem)->y, hash);
|
||||||
hash = hash_djb2_one_float(reinterpret_cast<const Quat *>(_data._mem)->z, hash);
|
hash = hash_djb2_one_float(reinterpret_cast<const Quaternion *>(_data._mem)->z, hash);
|
||||||
return hash_djb2_one_float(reinterpret_cast<const Quat *>(_data._mem)->w, hash);
|
return hash_djb2_one_float(reinterpret_cast<const Quaternion *>(_data._mem)->w, hash);
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case BASIS: {
|
case BASIS: {
|
||||||
@ -3127,7 +3126,7 @@ uint32_t Variant::hash() const {
|
|||||||
(hash_compare_scalar((p_lhs).y, (p_rhs).y)) && \
|
(hash_compare_scalar((p_lhs).y, (p_rhs).y)) && \
|
||||||
(hash_compare_scalar((p_lhs).z, (p_rhs).z))
|
(hash_compare_scalar((p_lhs).z, (p_rhs).z))
|
||||||
|
|
||||||
#define hash_compare_quat(p_lhs, p_rhs) \
|
#define hash_compare_quaternion(p_lhs, p_rhs) \
|
||||||
(hash_compare_scalar((p_lhs).x, (p_rhs).x)) && \
|
(hash_compare_scalar((p_lhs).x, (p_rhs).x)) && \
|
||||||
(hash_compare_scalar((p_lhs).y, (p_rhs).y)) && \
|
(hash_compare_scalar((p_lhs).y, (p_rhs).y)) && \
|
||||||
(hash_compare_scalar((p_lhs).z, (p_rhs).z)) && \
|
(hash_compare_scalar((p_lhs).z, (p_rhs).z)) && \
|
||||||
@ -3235,11 +3234,11 @@ bool Variant::hash_compare(const Variant &p_variant) const {
|
|||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case QUAT: {
|
case QUATERNION: {
|
||||||
const Quat *l = reinterpret_cast<const Quat *>(_data._mem);
|
const Quaternion *l = reinterpret_cast<const Quaternion *>(_data._mem);
|
||||||
const Quat *r = reinterpret_cast<const Quat *>(p_variant._data._mem);
|
const Quaternion *r = reinterpret_cast<const Quaternion *>(p_variant._data._mem);
|
||||||
|
|
||||||
return hash_compare_quat(*l, *r);
|
return hash_compare_quaternion(*l, *r);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case BASIS: {
|
case BASIS: {
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
#include "core/math/color.h"
|
#include "core/math/color.h"
|
||||||
#include "core/math/face3.h"
|
#include "core/math/face3.h"
|
||||||
#include "core/math/plane.h"
|
#include "core/math/plane.h"
|
||||||
#include "core/math/quat.h"
|
#include "core/math/quaternion.h"
|
||||||
#include "core/math/transform_2d.h"
|
#include "core/math/transform_2d.h"
|
||||||
#include "core/math/transform_3d.h"
|
#include "core/math/transform_3d.h"
|
||||||
#include "core/math/vector3.h"
|
#include "core/math/vector3.h"
|
||||||
@ -88,7 +88,7 @@ public:
|
|||||||
VECTOR3I,
|
VECTOR3I,
|
||||||
TRANSFORM2D,
|
TRANSFORM2D,
|
||||||
PLANE,
|
PLANE,
|
||||||
QUAT,
|
QUATERNION,
|
||||||
AABB,
|
AABB,
|
||||||
BASIS,
|
BASIS,
|
||||||
TRANSFORM3D,
|
TRANSFORM3D,
|
||||||
@ -225,7 +225,7 @@ private:
|
|||||||
false, //VECTOR3I,
|
false, //VECTOR3I,
|
||||||
true, //TRANSFORM2D,
|
true, //TRANSFORM2D,
|
||||||
false, //PLANE,
|
false, //PLANE,
|
||||||
false, //QUAT,
|
false, //QUATERNION,
|
||||||
true, //AABB,
|
true, //AABB,
|
||||||
true, //BASIS,
|
true, //BASIS,
|
||||||
true, //TRANSFORM,
|
true, //TRANSFORM,
|
||||||
@ -320,7 +320,7 @@ public:
|
|||||||
operator Vector3i() const;
|
operator Vector3i() const;
|
||||||
operator Plane() const;
|
operator Plane() const;
|
||||||
operator ::AABB() const;
|
operator ::AABB() const;
|
||||||
operator Quat() const;
|
operator Quaternion() const;
|
||||||
operator Basis() const;
|
operator Basis() const;
|
||||||
operator Transform2D() const;
|
operator Transform2D() const;
|
||||||
operator Transform3D() const;
|
operator Transform3D() const;
|
||||||
@ -392,7 +392,7 @@ public:
|
|||||||
Variant(const Vector3i &p_vector3i);
|
Variant(const Vector3i &p_vector3i);
|
||||||
Variant(const Plane &p_plane);
|
Variant(const Plane &p_plane);
|
||||||
Variant(const ::AABB &p_aabb);
|
Variant(const ::AABB &p_aabb);
|
||||||
Variant(const Quat &p_quat);
|
Variant(const Quaternion &p_quat);
|
||||||
Variant(const Basis &p_matrix);
|
Variant(const Basis &p_matrix);
|
||||||
Variant(const Transform2D &p_transform);
|
Variant(const Transform2D &p_transform);
|
||||||
Variant(const Transform3D &p_transform);
|
Variant(const Transform3D &p_transform);
|
||||||
|
@ -1544,19 +1544,19 @@ static void _register_variant_builtin_methods() {
|
|||||||
bind_methodv(Plane, intersects_ray, &Plane::intersects_ray_bind, sarray("from", "dir"), varray());
|
bind_methodv(Plane, intersects_ray, &Plane::intersects_ray_bind, sarray("from", "dir"), varray());
|
||||||
bind_methodv(Plane, intersects_segment, &Plane::intersects_segment_bind, sarray("from", "to"), varray());
|
bind_methodv(Plane, intersects_segment, &Plane::intersects_segment_bind, sarray("from", "to"), varray());
|
||||||
|
|
||||||
/* Quat */
|
/* Quaternion */
|
||||||
|
|
||||||
bind_method(Quat, length, sarray(), varray());
|
bind_method(Quaternion, length, sarray(), varray());
|
||||||
bind_method(Quat, length_squared, sarray(), varray());
|
bind_method(Quaternion, length_squared, sarray(), varray());
|
||||||
bind_method(Quat, normalized, sarray(), varray());
|
bind_method(Quaternion, normalized, sarray(), varray());
|
||||||
bind_method(Quat, is_normalized, sarray(), varray());
|
bind_method(Quaternion, is_normalized, sarray(), varray());
|
||||||
bind_method(Quat, is_equal_approx, sarray("to"), varray());
|
bind_method(Quaternion, is_equal_approx, sarray("to"), varray());
|
||||||
bind_method(Quat, inverse, sarray(), varray());
|
bind_method(Quaternion, inverse, sarray(), varray());
|
||||||
bind_method(Quat, dot, sarray("with"), varray());
|
bind_method(Quaternion, dot, sarray("with"), varray());
|
||||||
bind_method(Quat, slerp, sarray("to", "weight"), varray());
|
bind_method(Quaternion, slerp, sarray("to", "weight"), varray());
|
||||||
bind_method(Quat, slerpni, sarray("to", "weight"), varray());
|
bind_method(Quaternion, slerpni, sarray("to", "weight"), varray());
|
||||||
bind_method(Quat, cubic_slerp, sarray("b", "pre_a", "post_b", "weight"), varray());
|
bind_method(Quaternion, cubic_slerp, sarray("b", "pre_a", "post_b", "weight"), varray());
|
||||||
bind_method(Quat, get_euler, sarray(), varray());
|
bind_method(Quaternion, get_euler, sarray(), varray());
|
||||||
|
|
||||||
/* Color */
|
/* Color */
|
||||||
|
|
||||||
@ -1668,7 +1668,7 @@ static void _register_variant_builtin_methods() {
|
|||||||
bind_method(Basis, get_orthogonal_index, sarray(), varray());
|
bind_method(Basis, get_orthogonal_index, sarray(), varray());
|
||||||
bind_method(Basis, slerp, sarray("to", "weight"), varray());
|
bind_method(Basis, slerp, sarray("to", "weight"), varray());
|
||||||
bind_method(Basis, is_equal_approx, sarray("b"), varray());
|
bind_method(Basis, is_equal_approx, sarray("b"), varray());
|
||||||
bind_method(Basis, get_rotation_quat, sarray(), varray());
|
bind_method(Basis, get_rotation_quaternion, sarray(), varray());
|
||||||
|
|
||||||
/* AABB */
|
/* AABB */
|
||||||
|
|
||||||
@ -2047,7 +2047,7 @@ static void _register_variant_builtin_methods() {
|
|||||||
_VariantCall::add_variant_constant(Variant::PLANE, "PLANE_XZ", Plane(Vector3(0, 1, 0), 0));
|
_VariantCall::add_variant_constant(Variant::PLANE, "PLANE_XZ", Plane(Vector3(0, 1, 0), 0));
|
||||||
_VariantCall::add_variant_constant(Variant::PLANE, "PLANE_XY", Plane(Vector3(0, 0, 1), 0));
|
_VariantCall::add_variant_constant(Variant::PLANE, "PLANE_XY", Plane(Vector3(0, 0, 1), 0));
|
||||||
|
|
||||||
_VariantCall::add_variant_constant(Variant::QUAT, "IDENTITY", Quat(0, 0, 0, 1));
|
_VariantCall::add_variant_constant(Variant::QUATERNION, "IDENTITY", Quaternion(0, 0, 0, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Variant::_register_variant_methods() {
|
void Variant::_register_variant_methods() {
|
||||||
|
@ -62,7 +62,7 @@ MAKE_PTRCONSTRUCT(Vector3);
|
|||||||
MAKE_PTRCONSTRUCT(Vector3i);
|
MAKE_PTRCONSTRUCT(Vector3i);
|
||||||
MAKE_PTRCONSTRUCT(Transform2D);
|
MAKE_PTRCONSTRUCT(Transform2D);
|
||||||
MAKE_PTRCONSTRUCT(Plane);
|
MAKE_PTRCONSTRUCT(Plane);
|
||||||
MAKE_PTRCONSTRUCT(Quat);
|
MAKE_PTRCONSTRUCT(Quaternion);
|
||||||
MAKE_PTRCONSTRUCT(AABB);
|
MAKE_PTRCONSTRUCT(AABB);
|
||||||
MAKE_PTRCONSTRUCT(Basis);
|
MAKE_PTRCONSTRUCT(Basis);
|
||||||
MAKE_PTRCONSTRUCT(Transform3D);
|
MAKE_PTRCONSTRUCT(Transform3D);
|
||||||
@ -659,13 +659,13 @@ void Variant::_register_variant_constructors() {
|
|||||||
add_constructor<VariantConstructor<Plane, Vector3, Vector3, Vector3>>(sarray("point1", "point2", "point3"));
|
add_constructor<VariantConstructor<Plane, Vector3, Vector3, Vector3>>(sarray("point1", "point2", "point3"));
|
||||||
add_constructor<VariantConstructor<Plane, double, double, double, double>>(sarray("a", "b", "c", "d"));
|
add_constructor<VariantConstructor<Plane, double, double, double, double>>(sarray("a", "b", "c", "d"));
|
||||||
|
|
||||||
add_constructor<VariantConstructNoArgs<Quat>>(sarray());
|
add_constructor<VariantConstructNoArgs<Quaternion>>(sarray());
|
||||||
add_constructor<VariantConstructor<Quat, Quat>>(sarray("from"));
|
add_constructor<VariantConstructor<Quaternion, Quaternion>>(sarray("from"));
|
||||||
add_constructor<VariantConstructor<Quat, Basis>>(sarray("from"));
|
add_constructor<VariantConstructor<Quaternion, Basis>>(sarray("from"));
|
||||||
add_constructor<VariantConstructor<Quat, Vector3>>(sarray("euler"));
|
add_constructor<VariantConstructor<Quaternion, Vector3>>(sarray("euler"));
|
||||||
add_constructor<VariantConstructor<Quat, Vector3, double>>(sarray("axis", "angle"));
|
add_constructor<VariantConstructor<Quaternion, Vector3, double>>(sarray("axis", "angle"));
|
||||||
add_constructor<VariantConstructor<Quat, Vector3, Vector3>>(sarray("arc_from", "arc_to"));
|
add_constructor<VariantConstructor<Quaternion, Vector3, Vector3>>(sarray("arc_from", "arc_to"));
|
||||||
add_constructor<VariantConstructor<Quat, double, double, double, double>>(sarray("x", "y", "z", "w"));
|
add_constructor<VariantConstructor<Quaternion, double, double, double, double>>(sarray("x", "y", "z", "w"));
|
||||||
|
|
||||||
add_constructor<VariantConstructNoArgs<::AABB>>(sarray());
|
add_constructor<VariantConstructNoArgs<::AABB>>(sarray());
|
||||||
add_constructor<VariantConstructor<::AABB, ::AABB>>(sarray("from"));
|
add_constructor<VariantConstructor<::AABB, ::AABB>>(sarray("from"));
|
||||||
@ -673,7 +673,7 @@ void Variant::_register_variant_constructors() {
|
|||||||
|
|
||||||
add_constructor<VariantConstructNoArgs<Basis>>(sarray());
|
add_constructor<VariantConstructNoArgs<Basis>>(sarray());
|
||||||
add_constructor<VariantConstructor<Basis, Basis>>(sarray("from"));
|
add_constructor<VariantConstructor<Basis, Basis>>(sarray("from"));
|
||||||
add_constructor<VariantConstructor<Basis, Quat>>(sarray("from"));
|
add_constructor<VariantConstructor<Basis, Quaternion>>(sarray("from"));
|
||||||
add_constructor<VariantConstructor<Basis, Vector3>>(sarray("euler"));
|
add_constructor<VariantConstructor<Basis, Vector3>>(sarray("euler"));
|
||||||
add_constructor<VariantConstructor<Basis, Vector3, double>>(sarray("axis", "phi"));
|
add_constructor<VariantConstructor<Basis, Vector3, double>>(sarray("axis", "phi"));
|
||||||
add_constructor<VariantConstructor<Basis, Vector3, Vector3, Vector3>>(sarray("x_axis", "y_axis", "z_axis"));
|
add_constructor<VariantConstructor<Basis, Vector3, Vector3, Vector3>>(sarray("x_axis", "y_axis", "z_axis"));
|
||||||
|
@ -138,8 +138,8 @@ public:
|
|||||||
_FORCE_INLINE_ static const Transform2D *get_transform2d(const Variant *v) { return v->_data._transform2d; }
|
_FORCE_INLINE_ static const Transform2D *get_transform2d(const Variant *v) { return v->_data._transform2d; }
|
||||||
_FORCE_INLINE_ static Plane *get_plane(Variant *v) { return reinterpret_cast<Plane *>(v->_data._mem); }
|
_FORCE_INLINE_ static Plane *get_plane(Variant *v) { return reinterpret_cast<Plane *>(v->_data._mem); }
|
||||||
_FORCE_INLINE_ static const Plane *get_plane(const Variant *v) { return reinterpret_cast<const Plane *>(v->_data._mem); }
|
_FORCE_INLINE_ static const Plane *get_plane(const Variant *v) { return reinterpret_cast<const Plane *>(v->_data._mem); }
|
||||||
_FORCE_INLINE_ static Quat *get_quat(Variant *v) { return reinterpret_cast<Quat *>(v->_data._mem); }
|
_FORCE_INLINE_ static Quaternion *get_quaternion(Variant *v) { return reinterpret_cast<Quaternion *>(v->_data._mem); }
|
||||||
_FORCE_INLINE_ static const Quat *get_quat(const Variant *v) { return reinterpret_cast<const Quat *>(v->_data._mem); }
|
_FORCE_INLINE_ static const Quaternion *get_quaternion(const Variant *v) { return reinterpret_cast<const Quaternion *>(v->_data._mem); }
|
||||||
_FORCE_INLINE_ static ::AABB *get_aabb(Variant *v) { return v->_data._aabb; }
|
_FORCE_INLINE_ static ::AABB *get_aabb(Variant *v) { return v->_data._aabb; }
|
||||||
_FORCE_INLINE_ static const ::AABB *get_aabb(const Variant *v) { return v->_data._aabb; }
|
_FORCE_INLINE_ static const ::AABB *get_aabb(const Variant *v) { return v->_data._aabb; }
|
||||||
_FORCE_INLINE_ static Basis *get_basis(Variant *v) { return v->_data._basis; }
|
_FORCE_INLINE_ static Basis *get_basis(Variant *v) { return v->_data._basis; }
|
||||||
@ -324,8 +324,8 @@ public:
|
|||||||
return get_transform(v);
|
return get_transform(v);
|
||||||
case Variant::TRANSFORM2D:
|
case Variant::TRANSFORM2D:
|
||||||
return get_transform2d(v);
|
return get_transform2d(v);
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
return get_quat(v);
|
return get_quaternion(v);
|
||||||
case Variant::PLANE:
|
case Variant::PLANE:
|
||||||
return get_plane(v);
|
return get_plane(v);
|
||||||
case Variant::BASIS:
|
case Variant::BASIS:
|
||||||
@ -402,8 +402,8 @@ public:
|
|||||||
return get_transform(v);
|
return get_transform(v);
|
||||||
case Variant::TRANSFORM2D:
|
case Variant::TRANSFORM2D:
|
||||||
return get_transform2d(v);
|
return get_transform2d(v);
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
return get_quat(v);
|
return get_quaternion(v);
|
||||||
case Variant::PLANE:
|
case Variant::PLANE:
|
||||||
return get_plane(v);
|
return get_plane(v);
|
||||||
case Variant::BASIS:
|
case Variant::BASIS:
|
||||||
@ -602,9 +602,9 @@ struct VariantGetInternalPtr<Plane> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct VariantGetInternalPtr<Quat> {
|
struct VariantGetInternalPtr<Quaternion> {
|
||||||
static Quat *get_ptr(Variant *v) { return VariantInternal::get_quat(v); }
|
static Quaternion *get_ptr(Variant *v) { return VariantInternal::get_quaternion(v); }
|
||||||
static const Quat *get_ptr(const Variant *v) { return VariantInternal::get_quat(v); }
|
static const Quaternion *get_ptr(const Variant *v) { return VariantInternal::get_quaternion(v); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
@ -831,9 +831,9 @@ struct VariantInternalAccessor<Plane> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct VariantInternalAccessor<Quat> {
|
struct VariantInternalAccessor<Quaternion> {
|
||||||
static _FORCE_INLINE_ const Quat &get(const Variant *v) { return *VariantInternal::get_quat(v); }
|
static _FORCE_INLINE_ const Quaternion &get(const Variant *v) { return *VariantInternal::get_quaternion(v); }
|
||||||
static _FORCE_INLINE_ void set(Variant *v, const Quat &p_value) { *VariantInternal::get_quat(v) = p_value; }
|
static _FORCE_INLINE_ void set(Variant *v, const Quaternion &p_value) { *VariantInternal::get_quaternion(v) = p_value; }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
@ -1067,8 +1067,8 @@ struct VariantInitializer<Plane> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct VariantInitializer<Quat> {
|
struct VariantInitializer<Quaternion> {
|
||||||
static _FORCE_INLINE_ void init(Variant *v) { VariantInternal::init_generic<Quat>(v); }
|
static _FORCE_INLINE_ void init(Variant *v) { VariantInternal::init_generic<Quaternion>(v); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
@ -1241,8 +1241,8 @@ struct VariantZeroAssigner<Plane> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct VariantZeroAssigner<Quat> {
|
struct VariantZeroAssigner<Quaternion> {
|
||||||
static _FORCE_INLINE_ void zero(Variant *v) { *VariantInternal::get_quat(v) = Quat(); }
|
static _FORCE_INLINE_ void zero(Variant *v) { *VariantInternal::get_quaternion(v) = Quaternion(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
|
@ -1395,7 +1395,7 @@ void Variant::_register_variant_operators() {
|
|||||||
register_op<OperatorEvaluatorAdd<Vector2i, Vector2i, Vector2i>>(Variant::OP_ADD, Variant::VECTOR2I, Variant::VECTOR2I);
|
register_op<OperatorEvaluatorAdd<Vector2i, Vector2i, Vector2i>>(Variant::OP_ADD, Variant::VECTOR2I, Variant::VECTOR2I);
|
||||||
register_op<OperatorEvaluatorAdd<Vector3, Vector3, Vector3>>(Variant::OP_ADD, Variant::VECTOR3, Variant::VECTOR3);
|
register_op<OperatorEvaluatorAdd<Vector3, Vector3, Vector3>>(Variant::OP_ADD, Variant::VECTOR3, Variant::VECTOR3);
|
||||||
register_op<OperatorEvaluatorAdd<Vector3i, Vector3i, Vector3i>>(Variant::OP_ADD, Variant::VECTOR3I, Variant::VECTOR3I);
|
register_op<OperatorEvaluatorAdd<Vector3i, Vector3i, Vector3i>>(Variant::OP_ADD, Variant::VECTOR3I, Variant::VECTOR3I);
|
||||||
register_op<OperatorEvaluatorAdd<Quat, Quat, Quat>>(Variant::OP_ADD, Variant::QUAT, Variant::QUAT);
|
register_op<OperatorEvaluatorAdd<Quaternion, Quaternion, Quaternion>>(Variant::OP_ADD, Variant::QUATERNION, Variant::QUATERNION);
|
||||||
register_op<OperatorEvaluatorAdd<Color, Color, Color>>(Variant::OP_ADD, Variant::COLOR, Variant::COLOR);
|
register_op<OperatorEvaluatorAdd<Color, Color, Color>>(Variant::OP_ADD, Variant::COLOR, Variant::COLOR);
|
||||||
register_op<OperatorEvaluatorAddArray>(Variant::OP_ADD, Variant::ARRAY, Variant::ARRAY);
|
register_op<OperatorEvaluatorAddArray>(Variant::OP_ADD, Variant::ARRAY, Variant::ARRAY);
|
||||||
register_op<OperatorEvaluatorAppendArray<uint8_t>>(Variant::OP_ADD, Variant::PACKED_BYTE_ARRAY, Variant::PACKED_BYTE_ARRAY);
|
register_op<OperatorEvaluatorAppendArray<uint8_t>>(Variant::OP_ADD, Variant::PACKED_BYTE_ARRAY, Variant::PACKED_BYTE_ARRAY);
|
||||||
@ -1416,7 +1416,7 @@ void Variant::_register_variant_operators() {
|
|||||||
register_op<OperatorEvaluatorSub<Vector2i, Vector2i, Vector2i>>(Variant::OP_SUBTRACT, Variant::VECTOR2I, Variant::VECTOR2I);
|
register_op<OperatorEvaluatorSub<Vector2i, Vector2i, Vector2i>>(Variant::OP_SUBTRACT, Variant::VECTOR2I, Variant::VECTOR2I);
|
||||||
register_op<OperatorEvaluatorSub<Vector3, Vector3, Vector3>>(Variant::OP_SUBTRACT, Variant::VECTOR3, Variant::VECTOR3);
|
register_op<OperatorEvaluatorSub<Vector3, Vector3, Vector3>>(Variant::OP_SUBTRACT, Variant::VECTOR3, Variant::VECTOR3);
|
||||||
register_op<OperatorEvaluatorSub<Vector3i, Vector3i, Vector3i>>(Variant::OP_SUBTRACT, Variant::VECTOR3I, Variant::VECTOR3I);
|
register_op<OperatorEvaluatorSub<Vector3i, Vector3i, Vector3i>>(Variant::OP_SUBTRACT, Variant::VECTOR3I, Variant::VECTOR3I);
|
||||||
register_op<OperatorEvaluatorSub<Quat, Quat, Quat>>(Variant::OP_SUBTRACT, Variant::QUAT, Variant::QUAT);
|
register_op<OperatorEvaluatorSub<Quaternion, Quaternion, Quaternion>>(Variant::OP_SUBTRACT, Variant::QUATERNION, Variant::QUATERNION);
|
||||||
register_op<OperatorEvaluatorSub<Color, Color, Color>>(Variant::OP_SUBTRACT, Variant::COLOR, Variant::COLOR);
|
register_op<OperatorEvaluatorSub<Color, Color, Color>>(Variant::OP_SUBTRACT, Variant::COLOR, Variant::COLOR);
|
||||||
|
|
||||||
register_op<OperatorEvaluatorMul<int64_t, int64_t, int64_t>>(Variant::OP_MULTIPLY, Variant::INT, Variant::INT);
|
register_op<OperatorEvaluatorMul<int64_t, int64_t, int64_t>>(Variant::OP_MULTIPLY, Variant::INT, Variant::INT);
|
||||||
@ -1449,9 +1449,9 @@ void Variant::_register_variant_operators() {
|
|||||||
register_op<OperatorEvaluatorMul<Vector3i, Vector3i, int64_t>>(Variant::OP_MULTIPLY, Variant::VECTOR3I, Variant::INT);
|
register_op<OperatorEvaluatorMul<Vector3i, Vector3i, int64_t>>(Variant::OP_MULTIPLY, Variant::VECTOR3I, Variant::INT);
|
||||||
register_op<OperatorEvaluatorMul<Vector3i, Vector3i, double>>(Variant::OP_MULTIPLY, Variant::VECTOR3I, Variant::FLOAT);
|
register_op<OperatorEvaluatorMul<Vector3i, Vector3i, double>>(Variant::OP_MULTIPLY, Variant::VECTOR3I, Variant::FLOAT);
|
||||||
|
|
||||||
register_op<OperatorEvaluatorMul<Quat, Quat, Quat>>(Variant::OP_MULTIPLY, Variant::QUAT, Variant::QUAT);
|
register_op<OperatorEvaluatorMul<Quaternion, Quaternion, Quaternion>>(Variant::OP_MULTIPLY, Variant::QUATERNION, Variant::QUATERNION);
|
||||||
register_op<OperatorEvaluatorMul<Quat, Quat, int64_t>>(Variant::OP_MULTIPLY, Variant::QUAT, Variant::INT);
|
register_op<OperatorEvaluatorMul<Quaternion, Quaternion, int64_t>>(Variant::OP_MULTIPLY, Variant::QUATERNION, Variant::INT);
|
||||||
register_op<OperatorEvaluatorMul<Quat, Quat, double>>(Variant::OP_MULTIPLY, Variant::QUAT, Variant::FLOAT);
|
register_op<OperatorEvaluatorMul<Quaternion, Quaternion, double>>(Variant::OP_MULTIPLY, Variant::QUATERNION, Variant::FLOAT);
|
||||||
|
|
||||||
register_op<OperatorEvaluatorMul<Color, Color, Color>>(Variant::OP_MULTIPLY, Variant::COLOR, Variant::COLOR);
|
register_op<OperatorEvaluatorMul<Color, Color, Color>>(Variant::OP_MULTIPLY, Variant::COLOR, Variant::COLOR);
|
||||||
register_op<OperatorEvaluatorMul<Color, Color, int64_t>>(Variant::OP_MULTIPLY, Variant::COLOR, Variant::INT);
|
register_op<OperatorEvaluatorMul<Color, Color, int64_t>>(Variant::OP_MULTIPLY, Variant::COLOR, Variant::INT);
|
||||||
@ -1477,13 +1477,13 @@ void Variant::_register_variant_operators() {
|
|||||||
register_op<OperatorEvaluatorXForm<Vector3, Basis, Vector3>>(Variant::OP_MULTIPLY, Variant::BASIS, Variant::VECTOR3);
|
register_op<OperatorEvaluatorXForm<Vector3, Basis, Vector3>>(Variant::OP_MULTIPLY, Variant::BASIS, Variant::VECTOR3);
|
||||||
register_op<OperatorEvaluatorXFormInv<Vector3, Vector3, Basis>>(Variant::OP_MULTIPLY, Variant::VECTOR3, Variant::BASIS);
|
register_op<OperatorEvaluatorXFormInv<Vector3, Vector3, Basis>>(Variant::OP_MULTIPLY, Variant::VECTOR3, Variant::BASIS);
|
||||||
|
|
||||||
register_op<OperatorEvaluatorMul<Quat, Quat, Quat>>(Variant::OP_MULTIPLY, Variant::QUAT, Variant::QUAT);
|
register_op<OperatorEvaluatorMul<Quaternion, Quaternion, Quaternion>>(Variant::OP_MULTIPLY, Variant::QUATERNION, Variant::QUATERNION);
|
||||||
register_op<OperatorEvaluatorMul<Quat, Quat, int64_t>>(Variant::OP_MULTIPLY, Variant::QUAT, Variant::INT);
|
register_op<OperatorEvaluatorMul<Quaternion, Quaternion, int64_t>>(Variant::OP_MULTIPLY, Variant::QUATERNION, Variant::INT);
|
||||||
register_op<OperatorEvaluatorMul<Quat, int64_t, Quat>>(Variant::OP_MULTIPLY, Variant::INT, Variant::QUAT);
|
register_op<OperatorEvaluatorMul<Quaternion, int64_t, Quaternion>>(Variant::OP_MULTIPLY, Variant::INT, Variant::QUATERNION);
|
||||||
register_op<OperatorEvaluatorMul<Quat, Quat, double>>(Variant::OP_MULTIPLY, Variant::QUAT, Variant::FLOAT);
|
register_op<OperatorEvaluatorMul<Quaternion, Quaternion, double>>(Variant::OP_MULTIPLY, Variant::QUATERNION, Variant::FLOAT);
|
||||||
register_op<OperatorEvaluatorMul<Quat, double, Quat>>(Variant::OP_MULTIPLY, Variant::FLOAT, Variant::QUAT);
|
register_op<OperatorEvaluatorMul<Quaternion, double, Quaternion>>(Variant::OP_MULTIPLY, Variant::FLOAT, Variant::QUATERNION);
|
||||||
register_op<OperatorEvaluatorXForm<Vector3, Quat, Vector3>>(Variant::OP_MULTIPLY, Variant::QUAT, Variant::VECTOR3);
|
register_op<OperatorEvaluatorXForm<Vector3, Quaternion, Vector3>>(Variant::OP_MULTIPLY, Variant::QUATERNION, Variant::VECTOR3);
|
||||||
register_op<OperatorEvaluatorXFormInv<Vector3, Vector3, Quat>>(Variant::OP_MULTIPLY, Variant::VECTOR3, Variant::QUAT);
|
register_op<OperatorEvaluatorXFormInv<Vector3, Vector3, Quaternion>>(Variant::OP_MULTIPLY, Variant::VECTOR3, Variant::QUATERNION);
|
||||||
|
|
||||||
register_op<OperatorEvaluatorMul<Color, Color, Color>>(Variant::OP_MULTIPLY, Variant::COLOR, Variant::COLOR);
|
register_op<OperatorEvaluatorMul<Color, Color, Color>>(Variant::OP_MULTIPLY, Variant::COLOR, Variant::COLOR);
|
||||||
register_op<OperatorEvaluatorMul<Color, Color, int64_t>>(Variant::OP_MULTIPLY, Variant::COLOR, Variant::INT);
|
register_op<OperatorEvaluatorMul<Color, Color, int64_t>>(Variant::OP_MULTIPLY, Variant::COLOR, Variant::INT);
|
||||||
@ -1516,8 +1516,8 @@ void Variant::_register_variant_operators() {
|
|||||||
register_op<OperatorEvaluatorDivNZ<Vector3i, Vector3i, double>>(Variant::OP_DIVIDE, Variant::VECTOR3I, Variant::FLOAT);
|
register_op<OperatorEvaluatorDivNZ<Vector3i, Vector3i, double>>(Variant::OP_DIVIDE, Variant::VECTOR3I, Variant::FLOAT);
|
||||||
register_op<OperatorEvaluatorDivNZ<Vector3i, Vector3i, int64_t>>(Variant::OP_DIVIDE, Variant::VECTOR3I, Variant::INT);
|
register_op<OperatorEvaluatorDivNZ<Vector3i, Vector3i, int64_t>>(Variant::OP_DIVIDE, Variant::VECTOR3I, Variant::INT);
|
||||||
|
|
||||||
register_op<OperatorEvaluatorDiv<Quat, Quat, double>>(Variant::OP_DIVIDE, Variant::QUAT, Variant::FLOAT);
|
register_op<OperatorEvaluatorDiv<Quaternion, Quaternion, double>>(Variant::OP_DIVIDE, Variant::QUATERNION, Variant::FLOAT);
|
||||||
register_op<OperatorEvaluatorDiv<Quat, Quat, int64_t>>(Variant::OP_DIVIDE, Variant::QUAT, Variant::INT);
|
register_op<OperatorEvaluatorDiv<Quaternion, Quaternion, int64_t>>(Variant::OP_DIVIDE, Variant::QUATERNION, Variant::INT);
|
||||||
|
|
||||||
register_op<OperatorEvaluatorDiv<Color, Color, Color>>(Variant::OP_DIVIDE, Variant::COLOR, Variant::COLOR);
|
register_op<OperatorEvaluatorDiv<Color, Color, Color>>(Variant::OP_DIVIDE, Variant::COLOR, Variant::COLOR);
|
||||||
register_op<OperatorEvaluatorDiv<Color, Color, double>>(Variant::OP_DIVIDE, Variant::COLOR, Variant::FLOAT);
|
register_op<OperatorEvaluatorDiv<Color, Color, double>>(Variant::OP_DIVIDE, Variant::COLOR, Variant::FLOAT);
|
||||||
@ -1544,7 +1544,7 @@ void Variant::_register_variant_operators() {
|
|||||||
register_op<OperatorEvaluatorStringModT<Vector3i>>(Variant::OP_MODULE, Variant::STRING, Variant::VECTOR3I);
|
register_op<OperatorEvaluatorStringModT<Vector3i>>(Variant::OP_MODULE, Variant::STRING, Variant::VECTOR3I);
|
||||||
register_op<OperatorEvaluatorStringModT<Transform2D>>(Variant::OP_MODULE, Variant::STRING, Variant::TRANSFORM2D);
|
register_op<OperatorEvaluatorStringModT<Transform2D>>(Variant::OP_MODULE, Variant::STRING, Variant::TRANSFORM2D);
|
||||||
register_op<OperatorEvaluatorStringModT<Plane>>(Variant::OP_MODULE, Variant::STRING, Variant::PLANE);
|
register_op<OperatorEvaluatorStringModT<Plane>>(Variant::OP_MODULE, Variant::STRING, Variant::PLANE);
|
||||||
register_op<OperatorEvaluatorStringModT<Quat>>(Variant::OP_MODULE, Variant::STRING, Variant::QUAT);
|
register_op<OperatorEvaluatorStringModT<Quaternion>>(Variant::OP_MODULE, Variant::STRING, Variant::QUATERNION);
|
||||||
register_op<OperatorEvaluatorStringModT<::AABB>>(Variant::OP_MODULE, Variant::STRING, Variant::AABB);
|
register_op<OperatorEvaluatorStringModT<::AABB>>(Variant::OP_MODULE, Variant::STRING, Variant::AABB);
|
||||||
register_op<OperatorEvaluatorStringModT<Basis>>(Variant::OP_MODULE, Variant::STRING, Variant::BASIS);
|
register_op<OperatorEvaluatorStringModT<Basis>>(Variant::OP_MODULE, Variant::STRING, Variant::BASIS);
|
||||||
register_op<OperatorEvaluatorStringModT<Transform3D>>(Variant::OP_MODULE, Variant::STRING, Variant::TRANSFORM3D);
|
register_op<OperatorEvaluatorStringModT<Transform3D>>(Variant::OP_MODULE, Variant::STRING, Variant::TRANSFORM3D);
|
||||||
@ -1574,7 +1574,7 @@ void Variant::_register_variant_operators() {
|
|||||||
register_op<OperatorEvaluatorNeg<Vector2i, Vector2i>>(Variant::OP_NEGATE, Variant::VECTOR2I, Variant::NIL);
|
register_op<OperatorEvaluatorNeg<Vector2i, Vector2i>>(Variant::OP_NEGATE, Variant::VECTOR2I, Variant::NIL);
|
||||||
register_op<OperatorEvaluatorNeg<Vector3, Vector3>>(Variant::OP_NEGATE, Variant::VECTOR3, Variant::NIL);
|
register_op<OperatorEvaluatorNeg<Vector3, Vector3>>(Variant::OP_NEGATE, Variant::VECTOR3, Variant::NIL);
|
||||||
register_op<OperatorEvaluatorNeg<Vector3i, Vector3i>>(Variant::OP_NEGATE, Variant::VECTOR3I, Variant::NIL);
|
register_op<OperatorEvaluatorNeg<Vector3i, Vector3i>>(Variant::OP_NEGATE, Variant::VECTOR3I, Variant::NIL);
|
||||||
register_op<OperatorEvaluatorNeg<Quat, Quat>>(Variant::OP_NEGATE, Variant::QUAT, Variant::NIL);
|
register_op<OperatorEvaluatorNeg<Quaternion, Quaternion>>(Variant::OP_NEGATE, Variant::QUATERNION, Variant::NIL);
|
||||||
register_op<OperatorEvaluatorNeg<Plane, Plane>>(Variant::OP_NEGATE, Variant::PLANE, Variant::NIL);
|
register_op<OperatorEvaluatorNeg<Plane, Plane>>(Variant::OP_NEGATE, Variant::PLANE, Variant::NIL);
|
||||||
register_op<OperatorEvaluatorNeg<Color, Color>>(Variant::OP_NEGATE, Variant::COLOR, Variant::NIL);
|
register_op<OperatorEvaluatorNeg<Color, Color>>(Variant::OP_NEGATE, Variant::COLOR, Variant::NIL);
|
||||||
|
|
||||||
@ -1584,7 +1584,7 @@ void Variant::_register_variant_operators() {
|
|||||||
register_op<OperatorEvaluatorPos<Vector2i, Vector2i>>(Variant::OP_POSITIVE, Variant::VECTOR2I, Variant::NIL);
|
register_op<OperatorEvaluatorPos<Vector2i, Vector2i>>(Variant::OP_POSITIVE, Variant::VECTOR2I, Variant::NIL);
|
||||||
register_op<OperatorEvaluatorPos<Vector3, Vector3>>(Variant::OP_POSITIVE, Variant::VECTOR3, Variant::NIL);
|
register_op<OperatorEvaluatorPos<Vector3, Vector3>>(Variant::OP_POSITIVE, Variant::VECTOR3, Variant::NIL);
|
||||||
register_op<OperatorEvaluatorPos<Vector3i, Vector3i>>(Variant::OP_POSITIVE, Variant::VECTOR3I, Variant::NIL);
|
register_op<OperatorEvaluatorPos<Vector3i, Vector3i>>(Variant::OP_POSITIVE, Variant::VECTOR3I, Variant::NIL);
|
||||||
register_op<OperatorEvaluatorPos<Quat, Quat>>(Variant::OP_POSITIVE, Variant::QUAT, Variant::NIL);
|
register_op<OperatorEvaluatorPos<Quaternion, Quaternion>>(Variant::OP_POSITIVE, Variant::QUATERNION, Variant::NIL);
|
||||||
register_op<OperatorEvaluatorPos<Plane, Plane>>(Variant::OP_POSITIVE, Variant::PLANE, Variant::NIL);
|
register_op<OperatorEvaluatorPos<Plane, Plane>>(Variant::OP_POSITIVE, Variant::PLANE, Variant::NIL);
|
||||||
register_op<OperatorEvaluatorPos<Color, Color>>(Variant::OP_POSITIVE, Variant::COLOR, Variant::NIL);
|
register_op<OperatorEvaluatorPos<Color, Color>>(Variant::OP_POSITIVE, Variant::COLOR, Variant::NIL);
|
||||||
|
|
||||||
@ -1612,7 +1612,7 @@ void Variant::_register_variant_operators() {
|
|||||||
register_op<OperatorEvaluatorEqual<Vector3i, Vector3i>>(Variant::OP_EQUAL, Variant::VECTOR3I, Variant::VECTOR3I);
|
register_op<OperatorEvaluatorEqual<Vector3i, Vector3i>>(Variant::OP_EQUAL, Variant::VECTOR3I, Variant::VECTOR3I);
|
||||||
register_op<OperatorEvaluatorEqual<Transform2D, Transform2D>>(Variant::OP_EQUAL, Variant::TRANSFORM2D, Variant::TRANSFORM2D);
|
register_op<OperatorEvaluatorEqual<Transform2D, Transform2D>>(Variant::OP_EQUAL, Variant::TRANSFORM2D, Variant::TRANSFORM2D);
|
||||||
register_op<OperatorEvaluatorEqual<Plane, Plane>>(Variant::OP_EQUAL, Variant::PLANE, Variant::PLANE);
|
register_op<OperatorEvaluatorEqual<Plane, Plane>>(Variant::OP_EQUAL, Variant::PLANE, Variant::PLANE);
|
||||||
register_op<OperatorEvaluatorEqual<Quat, Quat>>(Variant::OP_EQUAL, Variant::QUAT, Variant::QUAT);
|
register_op<OperatorEvaluatorEqual<Quaternion, Quaternion>>(Variant::OP_EQUAL, Variant::QUATERNION, Variant::QUATERNION);
|
||||||
register_op<OperatorEvaluatorEqual<::AABB, ::AABB>>(Variant::OP_EQUAL, Variant::AABB, Variant::AABB);
|
register_op<OperatorEvaluatorEqual<::AABB, ::AABB>>(Variant::OP_EQUAL, Variant::AABB, Variant::AABB);
|
||||||
register_op<OperatorEvaluatorEqual<Basis, Basis>>(Variant::OP_EQUAL, Variant::BASIS, Variant::BASIS);
|
register_op<OperatorEvaluatorEqual<Basis, Basis>>(Variant::OP_EQUAL, Variant::BASIS, Variant::BASIS);
|
||||||
register_op<OperatorEvaluatorEqual<Transform3D, Transform3D>>(Variant::OP_EQUAL, Variant::TRANSFORM3D, Variant::TRANSFORM3D);
|
register_op<OperatorEvaluatorEqual<Transform3D, Transform3D>>(Variant::OP_EQUAL, Variant::TRANSFORM3D, Variant::TRANSFORM3D);
|
||||||
@ -1658,7 +1658,7 @@ void Variant::_register_variant_operators() {
|
|||||||
register_op<OperatorEvaluatorNotEqual<Vector3i, Vector3i>>(Variant::OP_NOT_EQUAL, Variant::VECTOR3I, Variant::VECTOR3I);
|
register_op<OperatorEvaluatorNotEqual<Vector3i, Vector3i>>(Variant::OP_NOT_EQUAL, Variant::VECTOR3I, Variant::VECTOR3I);
|
||||||
register_op<OperatorEvaluatorNotEqual<Transform2D, Transform2D>>(Variant::OP_NOT_EQUAL, Variant::TRANSFORM2D, Variant::TRANSFORM2D);
|
register_op<OperatorEvaluatorNotEqual<Transform2D, Transform2D>>(Variant::OP_NOT_EQUAL, Variant::TRANSFORM2D, Variant::TRANSFORM2D);
|
||||||
register_op<OperatorEvaluatorNotEqual<Plane, Plane>>(Variant::OP_NOT_EQUAL, Variant::PLANE, Variant::PLANE);
|
register_op<OperatorEvaluatorNotEqual<Plane, Plane>>(Variant::OP_NOT_EQUAL, Variant::PLANE, Variant::PLANE);
|
||||||
register_op<OperatorEvaluatorNotEqual<Quat, Quat>>(Variant::OP_NOT_EQUAL, Variant::QUAT, Variant::QUAT);
|
register_op<OperatorEvaluatorNotEqual<Quaternion, Quaternion>>(Variant::OP_NOT_EQUAL, Variant::QUATERNION, Variant::QUATERNION);
|
||||||
register_op<OperatorEvaluatorNotEqual<::AABB, ::AABB>>(Variant::OP_NOT_EQUAL, Variant::AABB, Variant::AABB);
|
register_op<OperatorEvaluatorNotEqual<::AABB, ::AABB>>(Variant::OP_NOT_EQUAL, Variant::AABB, Variant::AABB);
|
||||||
register_op<OperatorEvaluatorNotEqual<Basis, Basis>>(Variant::OP_NOT_EQUAL, Variant::BASIS, Variant::BASIS);
|
register_op<OperatorEvaluatorNotEqual<Basis, Basis>>(Variant::OP_NOT_EQUAL, Variant::BASIS, Variant::BASIS);
|
||||||
register_op<OperatorEvaluatorNotEqual<Transform3D, Transform3D>>(Variant::OP_NOT_EQUAL, Variant::TRANSFORM3D, Variant::TRANSFORM3D);
|
register_op<OperatorEvaluatorNotEqual<Transform3D, Transform3D>>(Variant::OP_NOT_EQUAL, Variant::TRANSFORM3D, Variant::TRANSFORM3D);
|
||||||
@ -1849,7 +1849,7 @@ void Variant::_register_variant_operators() {
|
|||||||
register_op<OperatorEvaluatorInDictionaryHas<Vector3i>>(Variant::OP_IN, Variant::VECTOR3I, Variant::DICTIONARY);
|
register_op<OperatorEvaluatorInDictionaryHas<Vector3i>>(Variant::OP_IN, Variant::VECTOR3I, Variant::DICTIONARY);
|
||||||
register_op<OperatorEvaluatorInDictionaryHas<Transform2D>>(Variant::OP_IN, Variant::TRANSFORM2D, Variant::DICTIONARY);
|
register_op<OperatorEvaluatorInDictionaryHas<Transform2D>>(Variant::OP_IN, Variant::TRANSFORM2D, Variant::DICTIONARY);
|
||||||
register_op<OperatorEvaluatorInDictionaryHas<Plane>>(Variant::OP_IN, Variant::PLANE, Variant::DICTIONARY);
|
register_op<OperatorEvaluatorInDictionaryHas<Plane>>(Variant::OP_IN, Variant::PLANE, Variant::DICTIONARY);
|
||||||
register_op<OperatorEvaluatorInDictionaryHas<Quat>>(Variant::OP_IN, Variant::QUAT, Variant::DICTIONARY);
|
register_op<OperatorEvaluatorInDictionaryHas<Quaternion>>(Variant::OP_IN, Variant::QUATERNION, Variant::DICTIONARY);
|
||||||
register_op<OperatorEvaluatorInDictionaryHas<::AABB>>(Variant::OP_IN, Variant::AABB, Variant::DICTIONARY);
|
register_op<OperatorEvaluatorInDictionaryHas<::AABB>>(Variant::OP_IN, Variant::AABB, Variant::DICTIONARY);
|
||||||
register_op<OperatorEvaluatorInDictionaryHas<Basis>>(Variant::OP_IN, Variant::BASIS, Variant::DICTIONARY);
|
register_op<OperatorEvaluatorInDictionaryHas<Basis>>(Variant::OP_IN, Variant::BASIS, Variant::DICTIONARY);
|
||||||
register_op<OperatorEvaluatorInDictionaryHas<Transform3D>>(Variant::OP_IN, Variant::TRANSFORM3D, Variant::DICTIONARY);
|
register_op<OperatorEvaluatorInDictionaryHas<Transform3D>>(Variant::OP_IN, Variant::TRANSFORM3D, Variant::DICTIONARY);
|
||||||
@ -1886,7 +1886,7 @@ void Variant::_register_variant_operators() {
|
|||||||
register_op<OperatorEvaluatorInArrayFind<Vector3i, Array>>(Variant::OP_IN, Variant::VECTOR3I, Variant::ARRAY);
|
register_op<OperatorEvaluatorInArrayFind<Vector3i, Array>>(Variant::OP_IN, Variant::VECTOR3I, Variant::ARRAY);
|
||||||
register_op<OperatorEvaluatorInArrayFind<Transform2D, Array>>(Variant::OP_IN, Variant::TRANSFORM2D, Variant::ARRAY);
|
register_op<OperatorEvaluatorInArrayFind<Transform2D, Array>>(Variant::OP_IN, Variant::TRANSFORM2D, Variant::ARRAY);
|
||||||
register_op<OperatorEvaluatorInArrayFind<Plane, Array>>(Variant::OP_IN, Variant::PLANE, Variant::ARRAY);
|
register_op<OperatorEvaluatorInArrayFind<Plane, Array>>(Variant::OP_IN, Variant::PLANE, Variant::ARRAY);
|
||||||
register_op<OperatorEvaluatorInArrayFind<Quat, Array>>(Variant::OP_IN, Variant::QUAT, Variant::ARRAY);
|
register_op<OperatorEvaluatorInArrayFind<Quaternion, Array>>(Variant::OP_IN, Variant::QUATERNION, Variant::ARRAY);
|
||||||
register_op<OperatorEvaluatorInArrayFind<::AABB, Array>>(Variant::OP_IN, Variant::AABB, Variant::ARRAY);
|
register_op<OperatorEvaluatorInArrayFind<::AABB, Array>>(Variant::OP_IN, Variant::AABB, Variant::ARRAY);
|
||||||
register_op<OperatorEvaluatorInArrayFind<Basis, Array>>(Variant::OP_IN, Variant::BASIS, Variant::ARRAY);
|
register_op<OperatorEvaluatorInArrayFind<Basis, Array>>(Variant::OP_IN, Variant::BASIS, Variant::ARRAY);
|
||||||
register_op<OperatorEvaluatorInArrayFind<Transform3D, Array>>(Variant::OP_IN, Variant::TRANSFORM3D, Variant::ARRAY);
|
register_op<OperatorEvaluatorInArrayFind<Transform3D, Array>>(Variant::OP_IN, Variant::TRANSFORM3D, Variant::ARRAY);
|
||||||
|
@ -614,7 +614,7 @@ Error VariantParser::parse_value(Token &token, Variant &value, Stream *p_stream,
|
|||||||
}
|
}
|
||||||
|
|
||||||
value = Plane(args[0], args[1], args[2], args[3]);
|
value = Plane(args[0], args[1], args[2], args[3]);
|
||||||
} else if (id == "Quat") {
|
} else if (id == "Quaternion" || id == "Quat") { // "Quat" kept for compatibility
|
||||||
Vector<real_t> args;
|
Vector<real_t> args;
|
||||||
Error err = _parse_construct<real_t>(p_stream, args, line, r_err_str);
|
Error err = _parse_construct<real_t>(p_stream, args, line, r_err_str);
|
||||||
if (err) {
|
if (err) {
|
||||||
@ -626,7 +626,7 @@ Error VariantParser::parse_value(Token &token, Variant &value, Stream *p_stream,
|
|||||||
return ERR_PARSE_ERROR;
|
return ERR_PARSE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
value = Quat(args[0], args[1], args[2], args[3]);
|
value = Quaternion(args[0], args[1], args[2], args[3]);
|
||||||
} else if (id == "AABB" || id == "Rect3") {
|
} else if (id == "AABB" || id == "Rect3") {
|
||||||
Vector<real_t> args;
|
Vector<real_t> args;
|
||||||
Error err = _parse_construct<real_t>(p_stream, args, line, r_err_str);
|
Error err = _parse_construct<real_t>(p_stream, args, line, r_err_str);
|
||||||
@ -1454,9 +1454,9 @@ Error VariantWriter::write(const Variant &p_variant, StoreStringFunc p_store_str
|
|||||||
p_store_string_func(p_store_string_ud, "AABB( " + rtosfix(aabb.position.x) + ", " + rtosfix(aabb.position.y) + ", " + rtosfix(aabb.position.z) + ", " + rtosfix(aabb.size.x) + ", " + rtosfix(aabb.size.y) + ", " + rtosfix(aabb.size.z) + " )");
|
p_store_string_func(p_store_string_ud, "AABB( " + rtosfix(aabb.position.x) + ", " + rtosfix(aabb.position.y) + ", " + rtosfix(aabb.position.z) + ", " + rtosfix(aabb.size.x) + ", " + rtosfix(aabb.size.y) + ", " + rtosfix(aabb.size.z) + " )");
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case Variant::QUAT: {
|
case Variant::QUATERNION: {
|
||||||
Quat quat = p_variant;
|
Quaternion quaternion = p_variant;
|
||||||
p_store_string_func(p_store_string_ud, "Quat( " + rtosfix(quat.x) + ", " + rtosfix(quat.y) + ", " + rtosfix(quat.z) + ", " + rtosfix(quat.w) + " )");
|
p_store_string_func(p_store_string_ud, "Quaternion( " + rtosfix(quaternion.x) + ", " + rtosfix(quaternion.y) + ", " + rtosfix(quaternion.z) + ", " + rtosfix(quaternion.w) + " )");
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case Variant::TRANSFORM2D: {
|
case Variant::TRANSFORM2D: {
|
||||||
|
@ -279,10 +279,10 @@ SETGET_NUMBER_STRUCT_CUSTOM(Plane, double, z, normal.z)
|
|||||||
SETGET_STRUCT(Plane, Vector3, normal)
|
SETGET_STRUCT(Plane, Vector3, normal)
|
||||||
SETGET_NUMBER_STRUCT(Plane, double, d)
|
SETGET_NUMBER_STRUCT(Plane, double, d)
|
||||||
|
|
||||||
SETGET_NUMBER_STRUCT(Quat, double, x)
|
SETGET_NUMBER_STRUCT(Quaternion, double, x)
|
||||||
SETGET_NUMBER_STRUCT(Quat, double, y)
|
SETGET_NUMBER_STRUCT(Quaternion, double, y)
|
||||||
SETGET_NUMBER_STRUCT(Quat, double, z)
|
SETGET_NUMBER_STRUCT(Quaternion, double, z)
|
||||||
SETGET_NUMBER_STRUCT(Quat, double, w)
|
SETGET_NUMBER_STRUCT(Quaternion, double, w)
|
||||||
|
|
||||||
SETGET_STRUCT_FUNC_INDEX(Basis, Vector3, x, set_axis, get_axis, 0)
|
SETGET_STRUCT_FUNC_INDEX(Basis, Vector3, x, set_axis, get_axis, 0)
|
||||||
SETGET_STRUCT_FUNC_INDEX(Basis, Vector3, y, set_axis, get_axis, 1)
|
SETGET_STRUCT_FUNC_INDEX(Basis, Vector3, y, set_axis, get_axis, 1)
|
||||||
@ -374,10 +374,10 @@ void register_named_setters_getters() {
|
|||||||
REGISTER_MEMBER(Plane, d);
|
REGISTER_MEMBER(Plane, d);
|
||||||
REGISTER_MEMBER(Plane, normal);
|
REGISTER_MEMBER(Plane, normal);
|
||||||
|
|
||||||
REGISTER_MEMBER(Quat, x);
|
REGISTER_MEMBER(Quaternion, x);
|
||||||
REGISTER_MEMBER(Quat, y);
|
REGISTER_MEMBER(Quaternion, y);
|
||||||
REGISTER_MEMBER(Quat, z);
|
REGISTER_MEMBER(Quaternion, z);
|
||||||
REGISTER_MEMBER(Quat, w);
|
REGISTER_MEMBER(Quaternion, w);
|
||||||
|
|
||||||
REGISTER_MEMBER(Basis, x);
|
REGISTER_MEMBER(Basis, x);
|
||||||
REGISTER_MEMBER(Basis, y);
|
REGISTER_MEMBER(Basis, y);
|
||||||
@ -975,7 +975,7 @@ INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Vector2, double, real_t, 2)
|
|||||||
INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Vector2i, int64_t, int32_t, 2)
|
INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Vector2i, int64_t, int32_t, 2)
|
||||||
INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Vector3, double, real_t, 3)
|
INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Vector3, double, real_t, 3)
|
||||||
INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Vector3i, int64_t, int32_t, 3)
|
INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Vector3i, int64_t, int32_t, 3)
|
||||||
INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Quat, double, real_t, 4)
|
INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Quaternion, double, real_t, 4)
|
||||||
INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Color, double, float, 4)
|
INDEXED_SETGET_STRUCT_BULTIN_NUMERIC(Color, double, float, 4)
|
||||||
|
|
||||||
INDEXED_SETGET_STRUCT_BULTIN_ACCESSOR(Transform2D, Vector2, .elements, 3)
|
INDEXED_SETGET_STRUCT_BULTIN_ACCESSOR(Transform2D, Vector2, .elements, 3)
|
||||||
@ -1037,7 +1037,7 @@ void register_indexed_setters_getters() {
|
|||||||
REGISTER_INDEXED_MEMBER(Vector2i);
|
REGISTER_INDEXED_MEMBER(Vector2i);
|
||||||
REGISTER_INDEXED_MEMBER(Vector3);
|
REGISTER_INDEXED_MEMBER(Vector3);
|
||||||
REGISTER_INDEXED_MEMBER(Vector3i);
|
REGISTER_INDEXED_MEMBER(Vector3i);
|
||||||
REGISTER_INDEXED_MEMBER(Quat);
|
REGISTER_INDEXED_MEMBER(Quaternion);
|
||||||
REGISTER_INDEXED_MEMBER(Color);
|
REGISTER_INDEXED_MEMBER(Color);
|
||||||
REGISTER_INDEXED_MEMBER(Transform2D);
|
REGISTER_INDEXED_MEMBER(Transform2D);
|
||||||
REGISTER_INDEXED_MEMBER(Basis);
|
REGISTER_INDEXED_MEMBER(Basis);
|
||||||
@ -2135,10 +2135,10 @@ void Variant::blend(const Variant &a, const Variant &b, float c, Variant &r_dst)
|
|||||||
r_dst = ::AABB(ra->position + rb->position * c, ra->size + rb->size * c);
|
r_dst = ::AABB(ra->position + rb->position * c, ra->size + rb->size * c);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case QUAT: {
|
case QUATERNION: {
|
||||||
Quat empty_rot;
|
Quaternion empty_rot;
|
||||||
const Quat *qa = reinterpret_cast<const Quat *>(a._data._mem);
|
const Quaternion *qa = reinterpret_cast<const Quaternion *>(a._data._mem);
|
||||||
const Quat *qb = reinterpret_cast<const Quat *>(b._data._mem);
|
const Quaternion *qb = reinterpret_cast<const Quaternion *>(b._data._mem);
|
||||||
r_dst = *qa * empty_rot.slerp(*qb, c);
|
r_dst = *qa * empty_rot.slerp(*qb, c);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -2295,8 +2295,8 @@ void Variant::interpolate(const Variant &a, const Variant &b, float c, Variant &
|
|||||||
r_dst = a;
|
r_dst = a;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case QUAT: {
|
case QUATERNION: {
|
||||||
r_dst = reinterpret_cast<const Quat *>(a._data._mem)->slerp(*reinterpret_cast<const Quat *>(b._data._mem), c);
|
r_dst = reinterpret_cast<const Quaternion *>(a._data._mem)->slerp(*reinterpret_cast<const Quaternion *>(b._data._mem), c);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case AABB: {
|
case AABB: {
|
||||||
|
@ -2596,8 +2596,8 @@
|
|||||||
<constant name="TYPE_PLANE" value="12" enum="Variant.Type">
|
<constant name="TYPE_PLANE" value="12" enum="Variant.Type">
|
||||||
Variable is of type [Plane].
|
Variable is of type [Plane].
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="TYPE_QUAT" value="13" enum="Variant.Type">
|
<constant name="TYPE_QUATERNION" value="13" enum="Variant.Type">
|
||||||
Variable is of type [Quat].
|
Variable is of type [Quaternion].
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="TYPE_AABB" value="14" enum="Variant.Type">
|
<constant name="TYPE_AABB" value="14" enum="Variant.Type">
|
||||||
Variable is of type [AABB].
|
Variable is of type [AABB].
|
||||||
|
@ -640,7 +640,7 @@
|
|||||||
</argument>
|
</argument>
|
||||||
<argument index="2" name="location" type="Vector3">
|
<argument index="2" name="location" type="Vector3">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="3" name="rotation" type="Quat">
|
<argument index="3" name="rotation" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="4" name="scale" type="Vector3">
|
<argument index="4" name="scale" type="Vector3">
|
||||||
</argument>
|
</argument>
|
||||||
@ -656,7 +656,7 @@
|
|||||||
<argument index="1" name="time_sec" type="float">
|
<argument index="1" name="time_sec" type="float">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Returns the interpolated value of a transform track at a given time (in seconds). An array consisting of 3 elements: position ([Vector3]), rotation ([Quat]) and scale ([Vector3]).
|
Returns the interpolated value of a transform track at a given time (in seconds). An array consisting of 3 elements: position ([Vector3]), rotation ([Quaternion]) and scale ([Vector3]).
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="value_track_get_key_indices" qualifiers="const">
|
<method name="value_track_get_key_indices" qualifiers="const">
|
||||||
|
@ -53,13 +53,13 @@
|
|||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Constructs a pure rotation basis matrix from the given Euler angles (in the YXZ convention: when *composing*, first Y, then X, and Z last), given in the vector format as (X angle, Y angle, Z angle).
|
Constructs a pure rotation basis matrix from the given Euler angles (in the YXZ convention: when *composing*, first Y, then X, and Z last), given in the vector format as (X angle, Y angle, Z angle).
|
||||||
Consider using the [Quat] constructor instead, which uses a quaternion instead of Euler angles.
|
Consider using the [Quaternion] constructor instead, which uses a quaternion instead of Euler angles.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="Basis" qualifiers="constructor">
|
<method name="Basis" qualifiers="constructor">
|
||||||
<return type="Basis">
|
<return type="Basis">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="from" type="Quat">
|
<argument index="0" name="from" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Constructs a pure rotation basis matrix from the given quaternion.
|
Constructs a pure rotation basis matrix from the given quaternion.
|
||||||
@ -91,7 +91,7 @@
|
|||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Returns the basis's rotation in the form of Euler angles (in the YXZ convention: when decomposing, first Z, then X, and Y last). The returned vector contains the rotation angles in the format (X angle, Y angle, Z angle).
|
Returns the basis's rotation in the form of Euler angles (in the YXZ convention: when decomposing, first Z, then X, and Y last). The returned vector contains the rotation angles in the format (X angle, Y angle, Z angle).
|
||||||
Consider using the [method get_rotation_quat] method instead, which returns a [Quat] quaternion instead of Euler angles.
|
Consider using the [method get_rotation_quaternion] method instead, which returns a [Quaternion] quaternion instead of Euler angles.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_orthogonal_index" qualifiers="const">
|
<method name="get_orthogonal_index" qualifiers="const">
|
||||||
@ -101,8 +101,8 @@
|
|||||||
This function considers a discretization of rotations into 24 points on unit sphere, lying along the vectors (x,y,z) with each component being either -1, 0, or 1, and returns the index of the point best representing the orientation of the object. It is mainly used by the [GridMap] editor. For further details, refer to the Godot source code.
|
This function considers a discretization of rotations into 24 points on unit sphere, lying along the vectors (x,y,z) with each component being either -1, 0, or 1, and returns the index of the point best representing the orientation of the object. It is mainly used by the [GridMap] editor. For further details, refer to the Godot source code.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_rotation_quat" qualifiers="const">
|
<method name="get_rotation_quaternion" qualifiers="const">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Returns the basis's rotation in the form of a quaternion. See [method get_euler] if you need Euler angles, but keep in mind quaternions should generally be preferred to Euler angles.
|
Returns the basis's rotation in the form of a quaternion. See [method get_euler] if you need Euler angles, but keep in mind quaternions should generally be preferred to Euler angles.
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<class name="Quat" version="4.0">
|
<class name="Quaternion" version="4.0">
|
||||||
<brief_description>
|
<brief_description>
|
||||||
Quaternion.
|
Quaternion.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<description>
|
<description>
|
||||||
A unit quaternion used for representing 3D rotations. Quaternions need to be normalized to be used for rotation.
|
A unit quaternion used for representing 3D rotations. Quaternions need to be normalized to be used for rotation.
|
||||||
It is similar to Basis, which implements matrix representation of rotations, and can be parametrized using both an axis-angle pair or Euler angles. Basis stores rotation, scale, and shearing, while Quat only stores rotation.
|
It is similar to Basis, which implements matrix representation of rotations, and can be parametrized using both an axis-angle pair or Euler angles. Basis stores rotation, scale, and shearing, while Quaternion only stores rotation.
|
||||||
Due to its compactness and the way it is stored in memory, certain operations (obtaining axis-angle and performing SLERP, in particular) are more efficient and robust against floating-point errors.
|
Due to its compactness and the way it is stored in memory, certain operations (obtaining axis-angle and performing SLERP, in particular) are more efficient and robust against floating-point errors.
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
@ -13,24 +13,24 @@
|
|||||||
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
|
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<methods>
|
<methods>
|
||||||
<method name="Quat" qualifiers="constructor">
|
<method name="Quaternion" qualifiers="constructor">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Constructs a default-initialized quaternion with all components set to [code]0[/code].
|
Constructs a default-initialized quaternion with all components set to [code]0[/code].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="Quat" qualifiers="constructor">
|
<method name="Quaternion" qualifiers="constructor">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="from" type="Quat">
|
<argument index="0" name="from" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Constructs a [Quat] as a copy of the given [Quat].
|
Constructs a [Quaternion] as a copy of the given [Quaternion].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="Quat" qualifiers="constructor">
|
<method name="Quaternion" qualifiers="constructor">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="arc_from" type="Vector3">
|
<argument index="0" name="arc_from" type="Vector3">
|
||||||
</argument>
|
</argument>
|
||||||
@ -39,8 +39,8 @@
|
|||||||
<description>
|
<description>
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="Quat" qualifiers="constructor">
|
<method name="Quaternion" qualifiers="constructor">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="axis" type="Vector3">
|
<argument index="0" name="axis" type="Vector3">
|
||||||
</argument>
|
</argument>
|
||||||
@ -50,8 +50,8 @@
|
|||||||
Constructs a quaternion that will rotate around the given axis by the specified angle. The axis must be a normalized vector.
|
Constructs a quaternion that will rotate around the given axis by the specified angle. The axis must be a normalized vector.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="Quat" qualifiers="constructor">
|
<method name="Quaternion" qualifiers="constructor">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="euler" type="Vector3">
|
<argument index="0" name="euler" type="Vector3">
|
||||||
</argument>
|
</argument>
|
||||||
@ -59,8 +59,8 @@
|
|||||||
Constructs a quaternion that will perform a rotation specified by Euler angles (in the YXZ convention: when decomposing, first Z, then X, and Y last), given in the vector format as (X angle, Y angle, Z angle).
|
Constructs a quaternion that will perform a rotation specified by Euler angles (in the YXZ convention: when decomposing, first Z, then X, and Y last), given in the vector format as (X angle, Y angle, Z angle).
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="Quat" qualifiers="constructor">
|
<method name="Quaternion" qualifiers="constructor">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="from" type="Basis">
|
<argument index="0" name="from" type="Basis">
|
||||||
</argument>
|
</argument>
|
||||||
@ -68,8 +68,8 @@
|
|||||||
Constructs a quaternion from the given [Basis].
|
Constructs a quaternion from the given [Basis].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="Quat" qualifiers="constructor">
|
<method name="Quaternion" qualifiers="constructor">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="x" type="float">
|
<argument index="0" name="x" type="float">
|
||||||
</argument>
|
</argument>
|
||||||
@ -84,13 +84,13 @@
|
|||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="cubic_slerp" qualifiers="const">
|
<method name="cubic_slerp" qualifiers="const">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="b" type="Quat">
|
<argument index="0" name="b" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="1" name="pre_a" type="Quat">
|
<argument index="1" name="pre_a" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="2" name="post_b" type="Quat">
|
<argument index="2" name="post_b" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="3" name="weight" type="float">
|
<argument index="3" name="weight" type="float">
|
||||||
</argument>
|
</argument>
|
||||||
@ -101,7 +101,7 @@
|
|||||||
<method name="dot" qualifiers="const">
|
<method name="dot" qualifiers="const">
|
||||||
<return type="float">
|
<return type="float">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="with" type="Quat">
|
<argument index="0" name="with" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Returns the dot product of two quaternions.
|
Returns the dot product of two quaternions.
|
||||||
@ -115,7 +115,7 @@
|
|||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="inverse" qualifiers="const">
|
<method name="inverse" qualifiers="const">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Returns the inverse of the quaternion.
|
Returns the inverse of the quaternion.
|
||||||
@ -124,7 +124,7 @@
|
|||||||
<method name="is_equal_approx" qualifiers="const">
|
<method name="is_equal_approx" qualifiers="const">
|
||||||
<return type="bool">
|
<return type="bool">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="to" type="Quat">
|
<argument index="0" name="to" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Returns [code]true[/code] if this quaternion and [code]quat[/code] are approximately equal, by running [method @GlobalScope.is_equal_approx] on each component.
|
Returns [code]true[/code] if this quaternion and [code]quat[/code] are approximately equal, by running [method @GlobalScope.is_equal_approx] on each component.
|
||||||
@ -152,7 +152,7 @@
|
|||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="normalized" qualifiers="const">
|
<method name="normalized" qualifiers="const">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Returns a copy of the quaternion, normalized to unit length.
|
Returns a copy of the quaternion, normalized to unit length.
|
||||||
@ -161,15 +161,15 @@
|
|||||||
<method name="operator !=" qualifiers="operator">
|
<method name="operator !=" qualifiers="operator">
|
||||||
<return type="bool">
|
<return type="bool">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="right" type="Quat">
|
<argument index="0" name="right" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="operator *" qualifiers="operator">
|
<method name="operator *" qualifiers="operator">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="right" type="Quat">
|
<argument index="0" name="right" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
</description>
|
</description>
|
||||||
@ -183,7 +183,7 @@
|
|||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="operator *" qualifiers="operator">
|
<method name="operator *" qualifiers="operator">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="right" type="float">
|
<argument index="0" name="right" type="float">
|
||||||
</argument>
|
</argument>
|
||||||
@ -191,7 +191,7 @@
|
|||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="operator *" qualifiers="operator">
|
<method name="operator *" qualifiers="operator">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="right" type="int">
|
<argument index="0" name="right" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
@ -199,35 +199,35 @@
|
|||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="operator +" qualifiers="operator">
|
<method name="operator +" qualifiers="operator">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="operator +" qualifiers="operator">
|
<method name="operator +" qualifiers="operator">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="right" type="Quat">
|
<argument index="0" name="right" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="operator -" qualifiers="operator">
|
<method name="operator -" qualifiers="operator">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="operator -" qualifiers="operator">
|
<method name="operator -" qualifiers="operator">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="right" type="Quat">
|
<argument index="0" name="right" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="operator /" qualifiers="operator">
|
<method name="operator /" qualifiers="operator">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="right" type="float">
|
<argument index="0" name="right" type="float">
|
||||||
</argument>
|
</argument>
|
||||||
@ -235,7 +235,7 @@
|
|||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="operator /" qualifiers="operator">
|
<method name="operator /" qualifiers="operator">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="right" type="int">
|
<argument index="0" name="right" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
@ -245,7 +245,7 @@
|
|||||||
<method name="operator ==" qualifiers="operator">
|
<method name="operator ==" qualifiers="operator">
|
||||||
<return type="bool">
|
<return type="bool">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="right" type="Quat">
|
<argument index="0" name="right" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
</description>
|
</description>
|
||||||
@ -259,9 +259,9 @@
|
|||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="slerp" qualifiers="const">
|
<method name="slerp" qualifiers="const">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="to" type="Quat">
|
<argument index="0" name="to" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="1" name="weight" type="float">
|
<argument index="1" name="weight" type="float">
|
||||||
</argument>
|
</argument>
|
||||||
@ -271,9 +271,9 @@
|
|||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="slerpni" qualifiers="const">
|
<method name="slerpni" qualifiers="const">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="to" type="Quat">
|
<argument index="0" name="to" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<argument index="1" name="weight" type="float">
|
<argument index="1" name="weight" type="float">
|
||||||
</argument>
|
</argument>
|
||||||
@ -301,7 +301,7 @@
|
|||||||
</member>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
<constants>
|
<constants>
|
||||||
<constant name="IDENTITY" value="Quat( 0, 0, 0, 1 )">
|
<constant name="IDENTITY" value="Quaternion( 0, 0, 0, 1 )">
|
||||||
The identity quaternion, representing no rotation. Equivalent to an identity [Basis] matrix. If a vector is transformed by an identity quaternion, it will not change.
|
The identity quaternion, representing no rotation. Equivalent to an identity [Basis] matrix. If a vector is transformed by an identity quaternion, it will not change.
|
||||||
</constant>
|
</constant>
|
||||||
</constants>
|
</constants>
|
@ -286,7 +286,7 @@
|
|||||||
<method name="operator *" qualifiers="operator">
|
<method name="operator *" qualifiers="operator">
|
||||||
<return type="Vector3">
|
<return type="Vector3">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="right" type="Quat">
|
<argument index="0" name="right" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
</description>
|
</description>
|
||||||
|
@ -113,12 +113,12 @@
|
|||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="operator *" qualifiers="operator">
|
<method name="operator *" qualifiers="operator">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="right" type="Quat">
|
<argument index="0" name="right" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Multiplies each component of the [Quat] by the given [float].
|
Multiplies each component of the [Quaternion] by the given [float].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="operator *" qualifiers="operator">
|
<method name="operator *" qualifiers="operator">
|
||||||
|
@ -183,9 +183,9 @@
|
|||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="operator *" qualifiers="operator">
|
<method name="operator *" qualifiers="operator">
|
||||||
<return type="Quat">
|
<return type="Quaternion">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="right" type="Quat">
|
<argument index="0" name="right" type="Quaternion">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Multiplies each component of the quaternion by the given integer.
|
Multiplies each component of the quaternion by the given integer.
|
||||||
|
@ -525,7 +525,7 @@ public:
|
|||||||
switch (animation->track_get_type(track)) {
|
switch (animation->track_get_type(track)) {
|
||||||
case Animation::TYPE_TRANSFORM3D: {
|
case Animation::TYPE_TRANSFORM3D: {
|
||||||
p_list->push_back(PropertyInfo(Variant::VECTOR3, "location"));
|
p_list->push_back(PropertyInfo(Variant::VECTOR3, "location"));
|
||||||
p_list->push_back(PropertyInfo(Variant::QUAT, "rotation"));
|
p_list->push_back(PropertyInfo(Variant::QUATERNION, "rotation"));
|
||||||
p_list->push_back(PropertyInfo(Variant::VECTOR3, "scale"));
|
p_list->push_back(PropertyInfo(Variant::VECTOR3, "scale"));
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
@ -1164,7 +1164,7 @@ public:
|
|||||||
switch (animation->track_get_type(first_track)) {
|
switch (animation->track_get_type(first_track)) {
|
||||||
case Animation::TYPE_TRANSFORM3D: {
|
case Animation::TYPE_TRANSFORM3D: {
|
||||||
p_list->push_back(PropertyInfo(Variant::VECTOR3, "location"));
|
p_list->push_back(PropertyInfo(Variant::VECTOR3, "location"));
|
||||||
p_list->push_back(PropertyInfo(Variant::QUAT, "rotation"));
|
p_list->push_back(PropertyInfo(Variant::QUATERNION, "rotation"));
|
||||||
p_list->push_back(PropertyInfo(Variant::VECTOR3, "scale"));
|
p_list->push_back(PropertyInfo(Variant::VECTOR3, "scale"));
|
||||||
} break;
|
} break;
|
||||||
case Animation::TYPE_VALUE: {
|
case Animation::TYPE_VALUE: {
|
||||||
@ -3376,7 +3376,7 @@ void AnimationTrackEditor::_query_insert(const InsertData &p_id) {
|
|||||||
case Variant::FLOAT:
|
case Variant::FLOAT:
|
||||||
case Variant::VECTOR2:
|
case Variant::VECTOR2:
|
||||||
case Variant::VECTOR3:
|
case Variant::VECTOR3:
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
case Variant::PLANE:
|
case Variant::PLANE:
|
||||||
case Variant::COLOR: {
|
case Variant::COLOR: {
|
||||||
// Valid.
|
// Valid.
|
||||||
@ -3845,7 +3845,7 @@ static Vector<String> _get_bezier_subindices_for_type(Variant::Type p_type, bool
|
|||||||
subindices.push_back(":y");
|
subindices.push_back(":y");
|
||||||
subindices.push_back(":z");
|
subindices.push_back(":z");
|
||||||
} break;
|
} break;
|
||||||
case Variant::QUAT: {
|
case Variant::QUATERNION: {
|
||||||
subindices.push_back(":x");
|
subindices.push_back(":x");
|
||||||
subindices.push_back(":y");
|
subindices.push_back(":y");
|
||||||
subindices.push_back(":z");
|
subindices.push_back(":z");
|
||||||
@ -3911,7 +3911,7 @@ AnimationTrackEditor::TrackIndices AnimationTrackEditor::_confirm_insert(InsertD
|
|||||||
h.type == Variant::RECT2 ||
|
h.type == Variant::RECT2 ||
|
||||||
h.type == Variant::VECTOR3 ||
|
h.type == Variant::VECTOR3 ||
|
||||||
h.type == Variant::AABB ||
|
h.type == Variant::AABB ||
|
||||||
h.type == Variant::QUAT ||
|
h.type == Variant::QUATERNION ||
|
||||||
h.type == Variant::COLOR ||
|
h.type == Variant::COLOR ||
|
||||||
h.type == Variant::PLANE ||
|
h.type == Variant::PLANE ||
|
||||||
h.type == Variant::TRANSFORM2D ||
|
h.type == Variant::TRANSFORM2D ||
|
||||||
@ -3950,7 +3950,7 @@ AnimationTrackEditor::TrackIndices AnimationTrackEditor::_confirm_insert(InsertD
|
|||||||
Dictionary d;
|
Dictionary d;
|
||||||
d["location"] = tr.origin;
|
d["location"] = tr.origin;
|
||||||
d["scale"] = tr.basis.get_scale();
|
d["scale"] = tr.basis.get_scale();
|
||||||
d["rotation"] = Quat(tr.basis);
|
d["rotation"] = Quaternion(tr.basis);
|
||||||
value = d;
|
value = d;
|
||||||
} break;
|
} break;
|
||||||
case Animation::TYPE_BEZIER: {
|
case Animation::TYPE_BEZIER: {
|
||||||
@ -4394,7 +4394,7 @@ void AnimationTrackEditor::_new_track_node_selected(NodePath p_path) {
|
|||||||
filter.push_back(Variant::FLOAT);
|
filter.push_back(Variant::FLOAT);
|
||||||
filter.push_back(Variant::VECTOR2);
|
filter.push_back(Variant::VECTOR2);
|
||||||
filter.push_back(Variant::VECTOR3);
|
filter.push_back(Variant::VECTOR3);
|
||||||
filter.push_back(Variant::QUAT);
|
filter.push_back(Variant::QUATERNION);
|
||||||
filter.push_back(Variant::PLANE);
|
filter.push_back(Variant::PLANE);
|
||||||
filter.push_back(Variant::COLOR);
|
filter.push_back(Variant::COLOR);
|
||||||
|
|
||||||
@ -4464,7 +4464,7 @@ void AnimationTrackEditor::_new_track_property_selected(String p_name) {
|
|||||||
h.type == Variant::RECT2 ||
|
h.type == Variant::RECT2 ||
|
||||||
h.type == Variant::VECTOR3 ||
|
h.type == Variant::VECTOR3 ||
|
||||||
h.type == Variant::AABB ||
|
h.type == Variant::AABB ||
|
||||||
h.type == Variant::QUAT ||
|
h.type == Variant::QUATERNION ||
|
||||||
h.type == Variant::COLOR ||
|
h.type == Variant::COLOR ||
|
||||||
h.type == Variant::PLANE ||
|
h.type == Variant::PLANE ||
|
||||||
h.type == Variant::TRANSFORM2D ||
|
h.type == Variant::TRANSFORM2D ||
|
||||||
@ -4564,7 +4564,7 @@ void AnimationTrackEditor::_insert_key_from_track(float p_ofs, int p_track) {
|
|||||||
|
|
||||||
Vector3 loc = xf.get_origin();
|
Vector3 loc = xf.get_origin();
|
||||||
Vector3 scale = xf.basis.get_scale_local();
|
Vector3 scale = xf.basis.get_scale_local();
|
||||||
Quat rot = xf.basis;
|
Quaternion rot = xf.basis;
|
||||||
|
|
||||||
undo_redo->create_action(TTR("Add Transform Track Key"));
|
undo_redo->create_action(TTR("Add Transform Track Key"));
|
||||||
undo_redo->add_do_method(animation.ptr(), "transform_track_insert_key", p_track, p_ofs, loc, rot, scale);
|
undo_redo->add_do_method(animation.ptr(), "transform_track_insert_key", p_track, p_ofs, loc, rot, scale);
|
||||||
|
@ -203,8 +203,8 @@ void ConnectDialog::_add_bind() {
|
|||||||
case Variant::PLANE:
|
case Variant::PLANE:
|
||||||
value = Plane();
|
value = Plane();
|
||||||
break;
|
break;
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
value = Quat();
|
value = Quaternion();
|
||||||
break;
|
break;
|
||||||
case Variant::AABB:
|
case Variant::AABB:
|
||||||
value = AABB();
|
value = AABB();
|
||||||
@ -443,7 +443,7 @@ ConnectDialog::ConnectDialog() {
|
|||||||
type_list->add_item("Rect2", Variant::RECT2);
|
type_list->add_item("Rect2", Variant::RECT2);
|
||||||
type_list->add_item("Vector3", Variant::VECTOR3);
|
type_list->add_item("Vector3", Variant::VECTOR3);
|
||||||
type_list->add_item("Plane", Variant::PLANE);
|
type_list->add_item("Plane", Variant::PLANE);
|
||||||
type_list->add_item("Quat", Variant::QUAT);
|
type_list->add_item("Quaternion", Variant::QUATERNION);
|
||||||
type_list->add_item("AABB", Variant::AABB);
|
type_list->add_item("AABB", Variant::AABB);
|
||||||
type_list->add_item("Basis", Variant::BASIS);
|
type_list->add_item("Basis", Variant::BASIS);
|
||||||
type_list->add_item("Transform", Variant::TRANSFORM3D);
|
type_list->add_item("Transform", Variant::TRANSFORM3D);
|
||||||
|
@ -1761,14 +1761,14 @@ EditorPropertyPlane::EditorPropertyPlane(bool p_force_wide) {
|
|||||||
setting = false;
|
setting = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////// QUAT /////////////////////////
|
///////////////////// QUATERNION /////////////////////////
|
||||||
|
|
||||||
void EditorPropertyQuat::_value_changed(double val, const String &p_name) {
|
void EditorPropertyQuaternion::_value_changed(double val, const String &p_name) {
|
||||||
if (setting) {
|
if (setting) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat p;
|
Quaternion p;
|
||||||
p.x = spin[0]->get_value();
|
p.x = spin[0]->get_value();
|
||||||
p.y = spin[1]->get_value();
|
p.y = spin[1]->get_value();
|
||||||
p.z = spin[2]->get_value();
|
p.z = spin[2]->get_value();
|
||||||
@ -1776,8 +1776,8 @@ void EditorPropertyQuat::_value_changed(double val, const String &p_name) {
|
|||||||
emit_changed(get_edited_property(), p, p_name);
|
emit_changed(get_edited_property(), p, p_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorPropertyQuat::update_property() {
|
void EditorPropertyQuaternion::update_property() {
|
||||||
Quat val = get_edited_object()->get(get_edited_property());
|
Quaternion val = get_edited_object()->get(get_edited_property());
|
||||||
setting = true;
|
setting = true;
|
||||||
spin[0]->set_value(val.x);
|
spin[0]->set_value(val.x);
|
||||||
spin[1]->set_value(val.y);
|
spin[1]->set_value(val.y);
|
||||||
@ -1786,7 +1786,7 @@ void EditorPropertyQuat::update_property() {
|
|||||||
setting = false;
|
setting = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorPropertyQuat::_notification(int p_what) {
|
void EditorPropertyQuaternion::_notification(int p_what) {
|
||||||
if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
|
if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
|
||||||
Color base = get_theme_color("accent_color", "Editor");
|
Color base = get_theme_color("accent_color", "Editor");
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
@ -1797,10 +1797,10 @@ void EditorPropertyQuat::_notification(int p_what) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorPropertyQuat::_bind_methods() {
|
void EditorPropertyQuaternion::_bind_methods() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorPropertyQuat::setup(double p_min, double p_max, double p_step, bool p_no_slider) {
|
void EditorPropertyQuaternion::setup(double p_min, double p_max, double p_step, bool p_no_slider) {
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
spin[i]->set_min(p_min);
|
spin[i]->set_min(p_min);
|
||||||
spin[i]->set_max(p_max);
|
spin[i]->set_max(p_max);
|
||||||
@ -1811,7 +1811,7 @@ void EditorPropertyQuat::setup(double p_min, double p_max, double p_step, bool p
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EditorPropertyQuat::EditorPropertyQuat() {
|
EditorPropertyQuaternion::EditorPropertyQuaternion() {
|
||||||
bool horizontal = EDITOR_GET("interface/inspector/horizontal_vector_types_editing");
|
bool horizontal = EDITOR_GET("interface/inspector/horizontal_vector_types_editing");
|
||||||
|
|
||||||
BoxContainer *bc;
|
BoxContainer *bc;
|
||||||
@ -1832,7 +1832,7 @@ EditorPropertyQuat::EditorPropertyQuat() {
|
|||||||
spin[i]->set_label(desc[i]);
|
spin[i]->set_label(desc[i]);
|
||||||
bc->add_child(spin[i]);
|
bc->add_child(spin[i]);
|
||||||
add_focusable(spin[i]);
|
add_focusable(spin[i]);
|
||||||
spin[i]->connect("value_changed", callable_mp(this, &EditorPropertyQuat::_value_changed), varray(desc[i]));
|
spin[i]->connect("value_changed", callable_mp(this, &EditorPropertyQuaternion::_value_changed), varray(desc[i]));
|
||||||
if (horizontal) {
|
if (horizontal) {
|
||||||
spin[i]->set_h_size_flags(SIZE_EXPAND_FILL);
|
spin[i]->set_h_size_flags(SIZE_EXPAND_FILL);
|
||||||
}
|
}
|
||||||
@ -3056,8 +3056,8 @@ bool EditorInspectorDefaultPlugin::parse_property(Object *p_object, Variant::Typ
|
|||||||
editor->setup(min, max, step, hide_slider);
|
editor->setup(min, max, step, hide_slider);
|
||||||
add_property_editor(p_path, editor);
|
add_property_editor(p_path, editor);
|
||||||
} break;
|
} break;
|
||||||
case Variant::QUAT: {
|
case Variant::QUATERNION: {
|
||||||
EditorPropertyQuat *editor = memnew(EditorPropertyQuat);
|
EditorPropertyQuaternion *editor = memnew(EditorPropertyQuaternion);
|
||||||
double min = -65535, max = 65535, step = default_float_step;
|
double min = -65535, max = 65535, step = default_float_step;
|
||||||
bool hide_slider = true;
|
bool hide_slider = true;
|
||||||
|
|
||||||
|
@ -465,8 +465,8 @@ public:
|
|||||||
EditorPropertyPlane(bool p_force_wide = false);
|
EditorPropertyPlane(bool p_force_wide = false);
|
||||||
};
|
};
|
||||||
|
|
||||||
class EditorPropertyQuat : public EditorProperty {
|
class EditorPropertyQuaternion : public EditorProperty {
|
||||||
GDCLASS(EditorPropertyQuat, EditorProperty);
|
GDCLASS(EditorPropertyQuaternion, EditorProperty);
|
||||||
EditorSpinSlider *spin[4];
|
EditorSpinSlider *spin[4];
|
||||||
bool setting;
|
bool setting;
|
||||||
void _value_changed(double p_val, const String &p_name);
|
void _value_changed(double p_val, const String &p_name);
|
||||||
@ -478,7 +478,7 @@ protected:
|
|||||||
public:
|
public:
|
||||||
virtual void update_property() override;
|
virtual void update_property() override;
|
||||||
void setup(double p_min, double p_max, double p_step, bool p_no_slider);
|
void setup(double p_min, double p_max, double p_step, bool p_no_slider);
|
||||||
EditorPropertyQuat();
|
EditorPropertyQuaternion();
|
||||||
};
|
};
|
||||||
|
|
||||||
class EditorPropertyAABB : public EditorProperty {
|
class EditorPropertyAABB : public EditorProperty {
|
||||||
|
@ -850,8 +850,8 @@ void EditorPropertyDictionary::update_property() {
|
|||||||
prop = editor;
|
prop = editor;
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case Variant::QUAT: {
|
case Variant::QUATERNION: {
|
||||||
EditorPropertyQuat *editor = memnew(EditorPropertyQuat);
|
EditorPropertyQuaternion *editor = memnew(EditorPropertyQuaternion);
|
||||||
editor->setup(-100000, 100000, 0.001, true);
|
editor->setup(-100000, 100000, 0.001, true);
|
||||||
prop = editor;
|
prop = editor;
|
||||||
|
|
||||||
|
@ -1545,7 +1545,7 @@ void ColladaImport::create_animation(int p_clip, bool p_make_tracks_in_all_bones
|
|||||||
|
|
||||||
Vector3 s = xform.basis.get_scale();
|
Vector3 s = xform.basis.get_scale();
|
||||||
bool singular_matrix = Math::is_equal_approx(s.x, 0.0f) || Math::is_equal_approx(s.y, 0.0f) || Math::is_equal_approx(s.z, 0.0f);
|
bool singular_matrix = Math::is_equal_approx(s.x, 0.0f) || Math::is_equal_approx(s.y, 0.0f) || Math::is_equal_approx(s.z, 0.0f);
|
||||||
Quat q = singular_matrix ? Quat() : xform.basis.get_rotation_quat();
|
Quaternion q = singular_matrix ? Quaternion() : xform.basis.get_rotation_quaternion();
|
||||||
Vector3 l = xform.origin;
|
Vector3 l = xform.origin;
|
||||||
|
|
||||||
animation->transform_track_insert_key(track, snapshots[i], l, q, s);
|
animation->transform_track_insert_key(track, snapshots[i], l, q, s);
|
||||||
@ -1596,7 +1596,7 @@ void ColladaImport::create_animation(int p_clip, bool p_make_tracks_in_all_bones
|
|||||||
|
|
||||||
Vector3 s = xform.basis.get_scale();
|
Vector3 s = xform.basis.get_scale();
|
||||||
bool singular_matrix = Math::is_equal_approx(s.x, 0.0f) || Math::is_equal_approx(s.y, 0.0f) || Math::is_equal_approx(s.z, 0.0f);
|
bool singular_matrix = Math::is_equal_approx(s.x, 0.0f) || Math::is_equal_approx(s.y, 0.0f) || Math::is_equal_approx(s.z, 0.0f);
|
||||||
Quat q = singular_matrix ? Quat() : xform.basis.get_rotation_quat();
|
Quaternion q = singular_matrix ? Quaternion() : xform.basis.get_rotation_quaternion();
|
||||||
Vector3 l = xform.origin;
|
Vector3 l = xform.origin;
|
||||||
|
|
||||||
animation->transform_track_insert_key(track, 0, l, q, s);
|
animation->transform_track_insert_key(track, 0, l, q, s);
|
||||||
|
@ -857,7 +857,7 @@ void ResourceImporterScene::_create_clips(AnimationPlayer *anim, const Array &p_
|
|||||||
|
|
||||||
if (kt > (from + 0.01) && k > 0) {
|
if (kt > (from + 0.01) && k > 0) {
|
||||||
if (default_anim->track_get_type(j) == Animation::TYPE_TRANSFORM3D) {
|
if (default_anim->track_get_type(j) == Animation::TYPE_TRANSFORM3D) {
|
||||||
Quat q;
|
Quaternion q;
|
||||||
Vector3 p;
|
Vector3 p;
|
||||||
Vector3 s;
|
Vector3 s;
|
||||||
default_anim->transform_track_interpolate(j, from, &p, &q, &s);
|
default_anim->transform_track_interpolate(j, from, &p, &q, &s);
|
||||||
@ -871,7 +871,7 @@ void ResourceImporterScene::_create_clips(AnimationPlayer *anim, const Array &p_
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (default_anim->track_get_type(j) == Animation::TYPE_TRANSFORM3D) {
|
if (default_anim->track_get_type(j) == Animation::TYPE_TRANSFORM3D) {
|
||||||
Quat q;
|
Quaternion q;
|
||||||
Vector3 p;
|
Vector3 p;
|
||||||
Vector3 s;
|
Vector3 s;
|
||||||
default_anim->transform_track_get_key(j, k, &p, &q, &s);
|
default_anim->transform_track_get_key(j, k, &p, &q, &s);
|
||||||
@ -885,7 +885,7 @@ void ResourceImporterScene::_create_clips(AnimationPlayer *anim, const Array &p_
|
|||||||
|
|
||||||
if (dtrack != -1 && kt >= to) {
|
if (dtrack != -1 && kt >= to) {
|
||||||
if (default_anim->track_get_type(j) == Animation::TYPE_TRANSFORM3D) {
|
if (default_anim->track_get_type(j) == Animation::TYPE_TRANSFORM3D) {
|
||||||
Quat q;
|
Quaternion q;
|
||||||
Vector3 p;
|
Vector3 p;
|
||||||
Vector3 s;
|
Vector3 s;
|
||||||
default_anim->transform_track_interpolate(j, to, &p, &q, &s);
|
default_anim->transform_track_interpolate(j, to, &p, &q, &s);
|
||||||
@ -903,7 +903,7 @@ void ResourceImporterScene::_create_clips(AnimationPlayer *anim, const Array &p_
|
|||||||
dtrack = new_anim->get_track_count() - 1;
|
dtrack = new_anim->get_track_count() - 1;
|
||||||
new_anim->track_set_path(dtrack, default_anim->track_get_path(j));
|
new_anim->track_set_path(dtrack, default_anim->track_get_path(j));
|
||||||
if (default_anim->track_get_type(j) == Animation::TYPE_TRANSFORM3D) {
|
if (default_anim->track_get_type(j) == Animation::TYPE_TRANSFORM3D) {
|
||||||
Quat q;
|
Quaternion q;
|
||||||
Vector3 p;
|
Vector3 p;
|
||||||
Vector3 s;
|
Vector3 s;
|
||||||
default_anim->transform_track_interpolate(j, from, &p, &q, &s);
|
default_anim->transform_track_interpolate(j, from, &p, &q, &s);
|
||||||
|
@ -727,13 +727,13 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant::
|
|||||||
value_editor[3]->set_text(String::num(plane.d));
|
value_editor[3]->set_text(String::num(plane.d));
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case Variant::QUAT: {
|
case Variant::QUATERNION: {
|
||||||
field_names.push_back("x");
|
field_names.push_back("x");
|
||||||
field_names.push_back("y");
|
field_names.push_back("y");
|
||||||
field_names.push_back("z");
|
field_names.push_back("z");
|
||||||
field_names.push_back("w");
|
field_names.push_back("w");
|
||||||
config_value_editors(4, 4, 10, field_names);
|
config_value_editors(4, 4, 10, field_names);
|
||||||
Quat q = v;
|
Quaternion q = v;
|
||||||
value_editor[0]->set_text(String::num(q.x));
|
value_editor[0]->set_text(String::num(q.x));
|
||||||
value_editor[1]->set_text(String::num(q.y));
|
value_editor[1]->set_text(String::num(q.y));
|
||||||
value_editor[2]->set_text(String::num(q.z));
|
value_editor[2]->set_text(String::num(q.z));
|
||||||
@ -1513,8 +1513,8 @@ void CustomPropertyEditor::_modified(String p_string) {
|
|||||||
_emit_changed_whole_or_field();
|
_emit_changed_whole_or_field();
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case Variant::QUAT: {
|
case Variant::QUATERNION: {
|
||||||
Quat q;
|
Quaternion q;
|
||||||
q.x = _parse_real_expression(value_editor[0]->get_text());
|
q.x = _parse_real_expression(value_editor[0]->get_text());
|
||||||
q.y = _parse_real_expression(value_editor[1]->get_text());
|
q.y = _parse_real_expression(value_editor[1]->get_text());
|
||||||
q.z = _parse_real_expression(value_editor[2]->get_text());
|
q.z = _parse_real_expression(value_editor[2]->get_text());
|
||||||
@ -1635,7 +1635,7 @@ void CustomPropertyEditor::_focus_enter() {
|
|||||||
case Variant::RECT2:
|
case Variant::RECT2:
|
||||||
case Variant::VECTOR3:
|
case Variant::VECTOR3:
|
||||||
case Variant::PLANE:
|
case Variant::PLANE:
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
case Variant::AABB:
|
case Variant::AABB:
|
||||||
case Variant::TRANSFORM2D:
|
case Variant::TRANSFORM2D:
|
||||||
case Variant::BASIS:
|
case Variant::BASIS:
|
||||||
@ -1661,7 +1661,7 @@ void CustomPropertyEditor::_focus_exit() {
|
|||||||
case Variant::RECT2:
|
case Variant::RECT2:
|
||||||
case Variant::VECTOR3:
|
case Variant::VECTOR3:
|
||||||
case Variant::PLANE:
|
case Variant::PLANE:
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
case Variant::AABB:
|
case Variant::AABB:
|
||||||
case Variant::TRANSFORM2D:
|
case Variant::TRANSFORM2D:
|
||||||
case Variant::BASIS:
|
case Variant::BASIS:
|
||||||
|
@ -90,7 +90,7 @@ void PivotTransform::ReadTransformChain() {
|
|||||||
if (ok) {
|
if (ok) {
|
||||||
geometric_rotation = ImportUtils::EulerToQuaternion(rot, ImportUtils::deg2rad(GeometricRotation));
|
geometric_rotation = ImportUtils::EulerToQuaternion(rot, ImportUtils::deg2rad(GeometricRotation));
|
||||||
} else {
|
} else {
|
||||||
geometric_rotation = Quat();
|
geometric_rotation = Quaternion();
|
||||||
}
|
}
|
||||||
|
|
||||||
const Vector3 &GeometricTranslation = ImportUtils::safe_import_vector3(FBXDocParser::PropertyGet<Vector3>(props, "GeometricTranslation", ok));
|
const Vector3 &GeometricTranslation = ImportUtils::safe_import_vector3(FBXDocParser::PropertyGet<Vector3>(props, "GeometricTranslation", ok));
|
||||||
@ -100,7 +100,7 @@ void PivotTransform::ReadTransformChain() {
|
|||||||
geometric_translation = Vector3(0, 0, 0);
|
geometric_translation = Vector3(0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (geometric_rotation != Quat()) {
|
if (geometric_rotation != Quaternion()) {
|
||||||
print_error("geometric rotation is unsupported!");
|
print_error("geometric rotation is unsupported!");
|
||||||
//CRASH_COND(true);
|
//CRASH_COND(true);
|
||||||
}
|
}
|
||||||
@ -116,7 +116,7 @@ void PivotTransform::ReadTransformChain() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Transform3D PivotTransform::ComputeLocalTransform(Vector3 p_translation, Quat p_rotation, Vector3 p_scaling) const {
|
Transform3D PivotTransform::ComputeLocalTransform(Vector3 p_translation, Quaternion p_rotation, Vector3 p_scaling) const {
|
||||||
Transform3D T, Roff, Rp, Soff, Sp, S;
|
Transform3D T, Roff, Rp, Soff, Sp, S;
|
||||||
|
|
||||||
// Here I assume this is the operation which needs done.
|
// Here I assume this is the operation which needs done.
|
||||||
@ -142,18 +142,18 @@ Transform3D PivotTransform::ComputeLocalTransform(Vector3 p_translation, Quat p_
|
|||||||
Transform3D PivotTransform::ComputeGlobalTransform(Transform3D t) const {
|
Transform3D PivotTransform::ComputeGlobalTransform(Transform3D t) const {
|
||||||
Vector3 pos = t.origin;
|
Vector3 pos = t.origin;
|
||||||
Vector3 scale = t.basis.get_scale();
|
Vector3 scale = t.basis.get_scale();
|
||||||
Quat rot = t.basis.get_rotation_quat();
|
Quaternion rot = t.basis.get_rotation_quaternion();
|
||||||
return ComputeGlobalTransform(pos, rot, scale);
|
return ComputeGlobalTransform(pos, rot, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
Transform3D PivotTransform::ComputeLocalTransform(Transform3D t) const {
|
Transform3D PivotTransform::ComputeLocalTransform(Transform3D t) const {
|
||||||
Vector3 pos = t.origin;
|
Vector3 pos = t.origin;
|
||||||
Vector3 scale = t.basis.get_scale();
|
Vector3 scale = t.basis.get_scale();
|
||||||
Quat rot = t.basis.get_rotation_quat();
|
Quaternion rot = t.basis.get_rotation_quaternion();
|
||||||
return ComputeLocalTransform(pos, rot, scale);
|
return ComputeLocalTransform(pos, rot, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
Transform3D PivotTransform::ComputeGlobalTransform(Vector3 p_translation, Quat p_rotation, Vector3 p_scaling) const {
|
Transform3D PivotTransform::ComputeGlobalTransform(Vector3 p_translation, Quaternion p_rotation, Vector3 p_scaling) const {
|
||||||
Transform3D T, Roff, Rp, Soff, Sp, S;
|
Transform3D T, Roff, Rp, Soff, Sp, S;
|
||||||
|
|
||||||
// Here I assume this is the operation which needs done.
|
// Here I assume this is the operation which needs done.
|
||||||
@ -183,11 +183,11 @@ Transform3D PivotTransform::ComputeGlobalTransform(Vector3 p_translation, Quat p
|
|||||||
}
|
}
|
||||||
|
|
||||||
Transform3D local_rotation_m, parent_global_rotation_m;
|
Transform3D local_rotation_m, parent_global_rotation_m;
|
||||||
Quat parent_global_rotation = parent_global_xform.basis.get_rotation_quat();
|
Quaternion parent_global_rotation = parent_global_xform.basis.get_rotation_quaternion();
|
||||||
parent_global_rotation_m.basis.set_quat(parent_global_rotation);
|
parent_global_rotation_m.basis.set_quaternion(parent_global_rotation);
|
||||||
local_rotation_m = Rpre * R * Rpost;
|
local_rotation_m = Rpre * R * Rpost;
|
||||||
|
|
||||||
//Basis parent_global_rotation = Basis(parent_global_xform.get_basis().get_rotation_quat().normalized());
|
//Basis parent_global_rotation = Basis(parent_global_xform.get_basis().get_rotation_quaternion().normalized());
|
||||||
|
|
||||||
Transform3D local_shear_scaling, parent_shear_scaling, parent_shear_rotation, parent_shear_translation;
|
Transform3D local_shear_scaling, parent_shear_scaling, parent_shear_rotation, parent_shear_translation;
|
||||||
Vector3 parent_translation = parent_global_xform.get_origin();
|
Vector3 parent_translation = parent_global_xform.get_origin();
|
||||||
@ -250,11 +250,11 @@ void PivotTransform::ComputePivotTransform() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Transform3D local_rotation_m, parent_global_rotation_m;
|
Transform3D local_rotation_m, parent_global_rotation_m;
|
||||||
Quat parent_global_rotation = parent_global_xform.basis.get_rotation_quat();
|
Quaternion parent_global_rotation = parent_global_xform.basis.get_rotation_quaternion();
|
||||||
parent_global_rotation_m.basis.set_quat(parent_global_rotation);
|
parent_global_rotation_m.basis.set_quaternion(parent_global_rotation);
|
||||||
local_rotation_m = Rpre * R * Rpost;
|
local_rotation_m = Rpre * R * Rpost;
|
||||||
|
|
||||||
//Basis parent_global_rotation = Basis(parent_global_xform.get_basis().get_rotation_quat().normalized());
|
//Basis parent_global_rotation = Basis(parent_global_xform.get_basis().get_rotation_quaternion().normalized());
|
||||||
|
|
||||||
Transform3D local_shear_scaling, parent_shear_scaling, parent_shear_rotation, parent_shear_translation;
|
Transform3D local_shear_scaling, parent_shear_scaling, parent_shear_rotation, parent_shear_translation;
|
||||||
Vector3 parent_translation = parent_global_xform.get_origin();
|
Vector3 parent_translation = parent_global_xform.get_origin();
|
||||||
|
@ -58,10 +58,10 @@ enum TransformationComp {
|
|||||||
struct PivotTransform : Reference, ModelAbstraction {
|
struct PivotTransform : Reference, ModelAbstraction {
|
||||||
// at the end we want to keep geometric_ everything, post and pre rotation
|
// at the end we want to keep geometric_ everything, post and pre rotation
|
||||||
// these are used during animation data processing / keyframe ingestion the rest can be simplified down / out.
|
// these are used during animation data processing / keyframe ingestion the rest can be simplified down / out.
|
||||||
Quat pre_rotation = Quat();
|
Quaternion pre_rotation = Quaternion();
|
||||||
Quat post_rotation = Quat();
|
Quaternion post_rotation = Quaternion();
|
||||||
Quat rotation = Quat();
|
Quaternion rotation = Quaternion();
|
||||||
Quat geometric_rotation = Quat();
|
Quaternion geometric_rotation = Quaternion();
|
||||||
Vector3 rotation_pivot = Vector3();
|
Vector3 rotation_pivot = Vector3();
|
||||||
Vector3 rotation_offset = Vector3();
|
Vector3 rotation_offset = Vector3();
|
||||||
Vector3 scaling_offset = Vector3(1.0, 1.0, 1.0);
|
Vector3 scaling_offset = Vector3(1.0, 1.0, 1.0);
|
||||||
@ -87,8 +87,8 @@ struct PivotTransform : Reference, ModelAbstraction {
|
|||||||
|
|
||||||
Transform3D ComputeGlobalTransform(Transform3D t) const;
|
Transform3D ComputeGlobalTransform(Transform3D t) const;
|
||||||
Transform3D ComputeLocalTransform(Transform3D t) const;
|
Transform3D ComputeLocalTransform(Transform3D t) const;
|
||||||
Transform3D ComputeGlobalTransform(Vector3 p_translation, Quat p_rotation, Vector3 p_scaling) const;
|
Transform3D ComputeGlobalTransform(Vector3 p_translation, Quaternion p_rotation, Vector3 p_scaling) const;
|
||||||
Transform3D ComputeLocalTransform(Vector3 p_translation, Quat p_rotation, Vector3 p_scaling) const;
|
Transform3D ComputeLocalTransform(Vector3 p_translation, Quaternion p_rotation, Vector3 p_scaling) const;
|
||||||
|
|
||||||
/* Extract into xforms and calculate once */
|
/* Extract into xforms and calculate once */
|
||||||
void ComputePivotTransform();
|
void ComputePivotTransform();
|
||||||
|
@ -258,24 +258,24 @@ struct EditorSceneImporterAssetImportInterpolate {
|
|||||||
|
|
||||||
//thank you for existing, partial specialization
|
//thank you for existing, partial specialization
|
||||||
template <>
|
template <>
|
||||||
struct EditorSceneImporterAssetImportInterpolate<Quat> {
|
struct EditorSceneImporterAssetImportInterpolate<Quaternion> {
|
||||||
Quat lerp(const Quat &a, const Quat &b, float c) const {
|
Quaternion lerp(const Quaternion &a, const Quaternion &b, float c) const {
|
||||||
ERR_FAIL_COND_V(!a.is_normalized(), Quat());
|
ERR_FAIL_COND_V(!a.is_normalized(), Quaternion());
|
||||||
ERR_FAIL_COND_V(!b.is_normalized(), Quat());
|
ERR_FAIL_COND_V(!b.is_normalized(), Quaternion());
|
||||||
|
|
||||||
return a.slerp(b, c).normalized();
|
return a.slerp(b, c).normalized();
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat catmull_rom(const Quat &p0, const Quat &p1, const Quat &p2, const Quat &p3, float c) {
|
Quaternion catmull_rom(const Quaternion &p0, const Quaternion &p1, const Quaternion &p2, const Quaternion &p3, float c) {
|
||||||
ERR_FAIL_COND_V(!p1.is_normalized(), Quat());
|
ERR_FAIL_COND_V(!p1.is_normalized(), Quaternion());
|
||||||
ERR_FAIL_COND_V(!p2.is_normalized(), Quat());
|
ERR_FAIL_COND_V(!p2.is_normalized(), Quaternion());
|
||||||
|
|
||||||
return p1.slerp(p2, c).normalized();
|
return p1.slerp(p2, c).normalized();
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat bezier(Quat start, Quat control_1, Quat control_2, Quat end, float t) {
|
Quaternion bezier(Quaternion start, Quaternion control_1, Quaternion control_2, Quaternion end, float t) {
|
||||||
ERR_FAIL_COND_V(!start.is_normalized(), Quat());
|
ERR_FAIL_COND_V(!start.is_normalized(), Quaternion());
|
||||||
ERR_FAIL_COND_V(!end.is_normalized(), Quat());
|
ERR_FAIL_COND_V(!end.is_normalized(), Quaternion());
|
||||||
|
|
||||||
return start.slerp(end, t).normalized();
|
return start.slerp(end, t).normalized();
|
||||||
}
|
}
|
||||||
@ -888,7 +888,7 @@ Node3D *EditorSceneImporterFBX::_generate_scene(
|
|||||||
// we need to know what object the curves are for.
|
// we need to know what object the curves are for.
|
||||||
// we need the target ID and the target name for the track reduction.
|
// we need the target ID and the target name for the track reduction.
|
||||||
|
|
||||||
FBXDocParser::Model::RotOrder quat_rotation_order = FBXDocParser::Model::RotOrder_EulerXYZ;
|
FBXDocParser::Model::RotOrder quaternion_rotation_order = FBXDocParser::Model::RotOrder_EulerXYZ;
|
||||||
|
|
||||||
// T:: R:: S:: Visible:: Custom::
|
// T:: R:: S:: Visible:: Custom::
|
||||||
for (const FBXDocParser::AnimationCurveNode *curve_node : node_list) {
|
for (const FBXDocParser::AnimationCurveNode *curve_node : node_list) {
|
||||||
@ -910,7 +910,7 @@ Node3D *EditorSceneImporterFBX::_generate_scene(
|
|||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
//print_verbose("[doc] applied rotation order: " + itos(target->RotationOrder()));
|
//print_verbose("[doc] applied rotation order: " + itos(target->RotationOrder()));
|
||||||
quat_rotation_order = target->RotationOrder();
|
quaternion_rotation_order = target->RotationOrder();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t target_id = target->ID();
|
uint64_t target_id = target->ID();
|
||||||
@ -1086,7 +1086,7 @@ Node3D *EditorSceneImporterFBX::_generate_scene(
|
|||||||
Vector<float> pos_times;
|
Vector<float> pos_times;
|
||||||
Vector<Vector3> scale_values;
|
Vector<Vector3> scale_values;
|
||||||
Vector<float> scale_times;
|
Vector<float> scale_times;
|
||||||
Vector<Quat> rot_values;
|
Vector<Quaternion> rot_values;
|
||||||
Vector<float> rot_times;
|
Vector<float> rot_times;
|
||||||
|
|
||||||
double max_duration = 0;
|
double max_duration = 0;
|
||||||
@ -1122,8 +1122,8 @@ Node3D *EditorSceneImporterFBX::_generate_scene(
|
|||||||
bool got_pre = false;
|
bool got_pre = false;
|
||||||
bool got_post = false;
|
bool got_post = false;
|
||||||
|
|
||||||
Quat post_rotation;
|
Quaternion post_rotation;
|
||||||
Quat pre_rotation;
|
Quaternion pre_rotation;
|
||||||
|
|
||||||
// Rotation matrix
|
// Rotation matrix
|
||||||
const Vector3 &PreRotation = FBXDocParser::PropertyGet<Vector3>(props, "PreRotation", got_pre);
|
const Vector3 &PreRotation = FBXDocParser::PropertyGet<Vector3>(props, "PreRotation", got_pre);
|
||||||
@ -1137,24 +1137,24 @@ Node3D *EditorSceneImporterFBX::_generate_scene(
|
|||||||
post_rotation = ImportUtils::EulerToQuaternion(rot_order, ImportUtils::deg2rad(PostRotation));
|
post_rotation = ImportUtils::EulerToQuaternion(rot_order, ImportUtils::deg2rad(PostRotation));
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat lastQuat = Quat();
|
Quaternion lastQuaternion = Quaternion();
|
||||||
|
|
||||||
for (std::pair<int64_t, Vector3> rotation_key : rotation_keys.keyframes) {
|
for (std::pair<int64_t, Vector3> rotation_key : rotation_keys.keyframes) {
|
||||||
double animation_track_time = CONVERT_FBX_TIME(rotation_key.first);
|
double animation_track_time = CONVERT_FBX_TIME(rotation_key.first);
|
||||||
|
|
||||||
//print_verbose("euler rotation key: " + rotation_key.second);
|
//print_verbose("euler rotation key: " + rotation_key.second);
|
||||||
Quat rot_key_value = ImportUtils::EulerToQuaternion(quat_rotation_order, ImportUtils::deg2rad(rotation_key.second));
|
Quaternion rot_key_value = ImportUtils::EulerToQuaternion(quaternion_rotation_order, ImportUtils::deg2rad(rotation_key.second));
|
||||||
|
|
||||||
if (lastQuat != Quat() && rot_key_value.dot(lastQuat) < 0) {
|
if (lastQuaternion != Quaternion() && rot_key_value.dot(lastQuaternion) < 0) {
|
||||||
rot_key_value.x = -rot_key_value.x;
|
rot_key_value.x = -rot_key_value.x;
|
||||||
rot_key_value.y = -rot_key_value.y;
|
rot_key_value.y = -rot_key_value.y;
|
||||||
rot_key_value.z = -rot_key_value.z;
|
rot_key_value.z = -rot_key_value.z;
|
||||||
rot_key_value.w = -rot_key_value.w;
|
rot_key_value.w = -rot_key_value.w;
|
||||||
}
|
}
|
||||||
// pre_post rotation possibly could fix orientation
|
// pre_post rotation possibly could fix orientation
|
||||||
Quat final_rotation = pre_rotation * rot_key_value * post_rotation;
|
Quaternion final_rotation = pre_rotation * rot_key_value * post_rotation;
|
||||||
|
|
||||||
lastQuat = final_rotation;
|
lastQuaternion = final_rotation;
|
||||||
|
|
||||||
if (animation_track_time > max_duration) {
|
if (animation_track_time > max_duration) {
|
||||||
max_duration = animation_track_time;
|
max_duration = animation_track_time;
|
||||||
@ -1182,13 +1182,13 @@ Node3D *EditorSceneImporterFBX::_generate_scene(
|
|||||||
}
|
}
|
||||||
|
|
||||||
const Vector3 def_pos = translation_keys.has_default ? (translation_keys.default_value * state.scale) : bone_rest.origin;
|
const Vector3 def_pos = translation_keys.has_default ? (translation_keys.default_value * state.scale) : bone_rest.origin;
|
||||||
const Quat def_rot = rotation_keys.has_default ? ImportUtils::EulerToQuaternion(quat_rotation_order, ImportUtils::deg2rad(rotation_keys.default_value)) : bone_rest.basis.get_rotation_quat();
|
const Quaternion def_rot = rotation_keys.has_default ? ImportUtils::EulerToQuaternion(quaternion_rotation_order, ImportUtils::deg2rad(rotation_keys.default_value)) : bone_rest.basis.get_rotation_quaternion();
|
||||||
const Vector3 def_scale = scale_keys.has_default ? scale_keys.default_value : bone_rest.basis.get_scale();
|
const Vector3 def_scale = scale_keys.has_default ? scale_keys.default_value : bone_rest.basis.get_scale();
|
||||||
print_verbose("track defaults: p(" + def_pos + ") s(" + def_scale + ") r(" + def_rot + ")");
|
print_verbose("track defaults: p(" + def_pos + ") s(" + def_scale + ") r(" + def_rot + ")");
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
Vector3 pos = def_pos;
|
Vector3 pos = def_pos;
|
||||||
Quat rot = def_rot;
|
Quaternion rot = def_rot;
|
||||||
Vector3 scale = def_scale;
|
Vector3 scale = def_scale;
|
||||||
|
|
||||||
if (pos_values.size()) {
|
if (pos_values.size()) {
|
||||||
@ -1197,7 +1197,7 @@ Node3D *EditorSceneImporterFBX::_generate_scene(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (rot_values.size()) {
|
if (rot_values.size()) {
|
||||||
rot = _interpolate_track<Quat>(rot_times, rot_values, time,
|
rot = _interpolate_track<Quaternion>(rot_times, rot_values, time,
|
||||||
AssetImportAnimation::INTERP_LINEAR);
|
AssetImportAnimation::INTERP_LINEAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1209,12 +1209,12 @@ Node3D *EditorSceneImporterFBX::_generate_scene(
|
|||||||
// node animations must also include pivots
|
// node animations must also include pivots
|
||||||
if (skeleton_bone >= 0) {
|
if (skeleton_bone >= 0) {
|
||||||
Transform3D xform = Transform3D();
|
Transform3D xform = Transform3D();
|
||||||
xform.basis.set_quat_scale(rot, scale);
|
xform.basis.set_quaternion_scale(rot, scale);
|
||||||
xform.origin = pos;
|
xform.origin = pos;
|
||||||
const Transform3D t = bone_rest.affine_inverse() * xform;
|
const Transform3D t = bone_rest.affine_inverse() * xform;
|
||||||
|
|
||||||
// populate this again
|
// populate this again
|
||||||
rot = t.basis.get_rotation_quat();
|
rot = t.basis.get_rotation_quaternion();
|
||||||
rot.normalize();
|
rot.normalize();
|
||||||
scale = t.basis.get_scale();
|
scale = t.basis.get_scale();
|
||||||
pos = t.origin;
|
pos = t.origin;
|
||||||
|
@ -80,7 +80,7 @@ Basis ImportUtils::EulerToBasis(FBXDocParser::Model::RotOrder mode, const Vector
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat ImportUtils::EulerToQuaternion(FBXDocParser::Model::RotOrder mode, const Vector3 &p_rotation) {
|
Quaternion ImportUtils::EulerToQuaternion(FBXDocParser::Model::RotOrder mode, const Vector3 &p_rotation) {
|
||||||
return ImportUtils::EulerToBasis(mode, p_rotation);
|
return ImportUtils::EulerToBasis(mode, p_rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ Vector3 ImportUtils::BasisToEuler(FBXDocParser::Model::RotOrder mode, const Basi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3 ImportUtils::QuaternionToEuler(FBXDocParser::Model::RotOrder mode, const Quat &p_rotation) {
|
Vector3 ImportUtils::QuaternionToEuler(FBXDocParser::Model::RotOrder mode, const Quaternion &p_rotation) {
|
||||||
return BasisToEuler(mode, p_rotation);
|
return BasisToEuler(mode, p_rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,13 +56,13 @@ public:
|
|||||||
static Basis EulerToBasis(FBXDocParser::Model::RotOrder mode, const Vector3 &p_rotation);
|
static Basis EulerToBasis(FBXDocParser::Model::RotOrder mode, const Vector3 &p_rotation);
|
||||||
|
|
||||||
/// Converts rotation order vector (in rad) to quaternion.
|
/// Converts rotation order vector (in rad) to quaternion.
|
||||||
static Quat EulerToQuaternion(FBXDocParser::Model::RotOrder mode, const Vector3 &p_rotation);
|
static Quaternion EulerToQuaternion(FBXDocParser::Model::RotOrder mode, const Vector3 &p_rotation);
|
||||||
|
|
||||||
/// Converts basis into rotation order vector (in rad).
|
/// Converts basis into rotation order vector (in rad).
|
||||||
static Vector3 BasisToEuler(FBXDocParser::Model::RotOrder mode, const Basis &p_rotation);
|
static Vector3 BasisToEuler(FBXDocParser::Model::RotOrder mode, const Basis &p_rotation);
|
||||||
|
|
||||||
/// Converts quaternion into rotation order vector (in rad).
|
/// Converts quaternion into rotation order vector (in rad).
|
||||||
static Vector3 QuaternionToEuler(FBXDocParser::Model::RotOrder mode, const Quat &p_rotation);
|
static Vector3 QuaternionToEuler(FBXDocParser::Model::RotOrder mode, const Quaternion &p_rotation);
|
||||||
|
|
||||||
static void debug_xform(String name, const Transform3D &t) {
|
static void debug_xform(String name, const Transform3D &t) {
|
||||||
print_verbose(name + " " + t.origin + " rotation: " + (t.basis.get_euler() * (180 / Math_PI)));
|
print_verbose(name + " " + t.origin + " rotation: " + (t.basis.get_euler() * (180 / Math_PI)));
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* quat.cpp */
|
/* quaternion.cpp */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,31 +28,31 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#include "gdnative/quat.h"
|
#include "gdnative/quaternion.h"
|
||||||
|
|
||||||
#include "core/math/quat.h"
|
#include "core/math/quaternion.h"
|
||||||
|
|
||||||
static_assert(sizeof(godot_quat) == sizeof(Quat), "Quat size mismatch");
|
static_assert(sizeof(godot_quaternion) == sizeof(Quaternion), "Quaternion size mismatch");
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void GDAPI godot_quat_new(godot_quat *p_self) {
|
void GDAPI godot_quaternion_new(godot_quaternion *p_self) {
|
||||||
memnew_placement(p_self, Quat);
|
memnew_placement(p_self, Quaternion);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GDAPI godot_quat_new_copy(godot_quat *r_dest, const godot_quat *p_src) {
|
void GDAPI godot_quaternion_new_copy(godot_quaternion *r_dest, const godot_quaternion *p_src) {
|
||||||
memnew_placement(r_dest, Quat(*(Quat *)p_src));
|
memnew_placement(r_dest, Quaternion(*(Quaternion *)p_src));
|
||||||
}
|
}
|
||||||
|
|
||||||
godot_real_t GDAPI *godot_quat_operator_index(godot_quat *p_self, godot_int p_index) {
|
godot_real_t GDAPI *godot_quaternion_operator_index(godot_quaternion *p_self, godot_int p_index) {
|
||||||
Quat *self = (Quat *)p_self;
|
Quaternion *self = (Quaternion *)p_self;
|
||||||
return (godot_real_t *)&self->operator[](p_index);
|
return (godot_real_t *)&self->operator[](p_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
const godot_real_t GDAPI *godot_quat_operator_index_const(const godot_quat *p_self, godot_int p_index) {
|
const godot_real_t GDAPI *godot_quaternion_operator_index_const(const godot_quaternion *p_self, godot_int p_index) {
|
||||||
const Quat *self = (const Quat *)p_self;
|
const Quaternion *self = (const Quaternion *)p_self;
|
||||||
return (const godot_real_t *)&self->operator[](p_index);
|
return (const godot_real_t *)&self->operator[](p_index);
|
||||||
}
|
}
|
||||||
|
|
@ -143,10 +143,10 @@ void GDAPI godot_variant_new_plane(godot_variant *r_dest, const godot_plane *p_p
|
|||||||
memnew_placement_custom(dest, Variant, Variant(*plane));
|
memnew_placement_custom(dest, Variant, Variant(*plane));
|
||||||
}
|
}
|
||||||
|
|
||||||
void GDAPI godot_variant_new_quat(godot_variant *r_dest, const godot_quat *p_quat) {
|
void GDAPI godot_variant_new_quaternion(godot_variant *r_dest, const godot_quaternion *p_quaternion) {
|
||||||
Variant *dest = (Variant *)r_dest;
|
Variant *dest = (Variant *)r_dest;
|
||||||
const Quat *quat = (const Quat *)p_quat;
|
const Quaternion *quaternion = (const Quaternion *)p_quaternion;
|
||||||
memnew_placement_custom(dest, Variant, Variant(*quat));
|
memnew_placement_custom(dest, Variant, Variant(*quaternion));
|
||||||
}
|
}
|
||||||
|
|
||||||
void GDAPI godot_variant_new_aabb(godot_variant *r_dest, const godot_aabb *p_aabb) {
|
void GDAPI godot_variant_new_aabb(godot_variant *r_dest, const godot_aabb *p_aabb) {
|
||||||
@ -378,10 +378,10 @@ godot_plane GDAPI godot_variant_as_plane(const godot_variant *p_self) {
|
|||||||
return raw_dest;
|
return raw_dest;
|
||||||
}
|
}
|
||||||
|
|
||||||
godot_quat GDAPI godot_variant_as_quat(const godot_variant *p_self) {
|
godot_quaternion GDAPI godot_variant_as_quaternion(const godot_variant *p_self) {
|
||||||
godot_quat raw_dest;
|
godot_quaternion raw_dest;
|
||||||
const Variant *self = (const Variant *)p_self;
|
const Variant *self = (const Variant *)p_self;
|
||||||
Quat *dest = (Quat *)&raw_dest;
|
Quaternion *dest = (Quaternion *)&raw_dest;
|
||||||
*dest = *self;
|
*dest = *self;
|
||||||
return raw_dest;
|
return raw_dest;
|
||||||
}
|
}
|
||||||
|
@ -469,7 +469,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "godot_variant_new_quat",
|
"name": "godot_variant_new_quaternion",
|
||||||
"return_type": "void",
|
"return_type": "void",
|
||||||
"arguments": [
|
"arguments": [
|
||||||
[
|
[
|
||||||
@ -477,8 +477,8 @@
|
|||||||
"r_dest"
|
"r_dest"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"const godot_quat *",
|
"const godot_quaternion *",
|
||||||
"p_quat"
|
"p_quaternion"
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -893,8 +893,8 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "godot_variant_as_quat",
|
"name": "godot_variant_as_quaternion",
|
||||||
"return_type": "godot_quat",
|
"return_type": "godot_quaternion",
|
||||||
"arguments": [
|
"arguments": [
|
||||||
[
|
[
|
||||||
"const godot_variant *",
|
"const godot_variant *",
|
||||||
@ -3866,35 +3866,35 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "godot_quat_new",
|
"name": "godot_quaternion_new",
|
||||||
"return_type": "void",
|
"return_type": "void",
|
||||||
"arguments": [
|
"arguments": [
|
||||||
[
|
[
|
||||||
"godot_quat *",
|
"godot_quaternion *",
|
||||||
"p_self"
|
"p_self"
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "godot_quat_new_copy",
|
"name": "godot_quaternion_new_copy",
|
||||||
"return_type": "void",
|
"return_type": "void",
|
||||||
"arguments": [
|
"arguments": [
|
||||||
[
|
[
|
||||||
"godot_quat *",
|
"godot_quaternion *",
|
||||||
"r_dest"
|
"r_dest"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"const godot_quat *",
|
"const godot_quaternion *",
|
||||||
"p_src"
|
"p_src"
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "godot_quat_operator_index",
|
"name": "godot_quaternion_operator_index",
|
||||||
"return_type": "godot_real_t *",
|
"return_type": "godot_real_t *",
|
||||||
"arguments": [
|
"arguments": [
|
||||||
[
|
[
|
||||||
"godot_quat *",
|
"godot_quaternion *",
|
||||||
"p_self"
|
"p_self"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@ -3904,11 +3904,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "godot_quat_operator_index_const",
|
"name": "godot_quaternion_operator_index_const",
|
||||||
"return_type": "const godot_real_t *",
|
"return_type": "const godot_real_t *",
|
||||||
"arguments": [
|
"arguments": [
|
||||||
[
|
[
|
||||||
"const godot_quat *",
|
"const godot_quaternion *",
|
||||||
"p_self"
|
"p_self"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
@ -149,9 +149,9 @@ typedef void godot_object;
|
|||||||
|
|
||||||
#include <gdnative/plane.h>
|
#include <gdnative/plane.h>
|
||||||
|
|
||||||
/////// Quat
|
/////// Quaternion
|
||||||
|
|
||||||
#include <gdnative/quat.h>
|
#include <gdnative/quaternion.h>
|
||||||
|
|
||||||
/////// AABB
|
/////// AABB
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* quat.h */
|
/* quaternion.h */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/* This file is part of: */
|
/* This file is part of: */
|
||||||
/* GODOT ENGINE */
|
/* GODOT ENGINE */
|
||||||
@ -28,8 +28,8 @@
|
|||||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
#ifndef GODOT_QUAT_H
|
#ifndef GODOT_QUATERNION_H
|
||||||
#define GODOT_QUAT_H
|
#define GODOT_QUATERNION_H
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -37,24 +37,24 @@ extern "C" {
|
|||||||
|
|
||||||
#include <gdnative/math_defs.h>
|
#include <gdnative/math_defs.h>
|
||||||
|
|
||||||
#define GODOT_QUAT_SIZE (sizeof(godot_real_t) * 4)
|
#define GODOT_QUATERNION_SIZE (sizeof(godot_real_t) * 4)
|
||||||
|
|
||||||
#ifndef GODOT_CORE_API_GODOT_QUAT_TYPE_DEFINED
|
#ifndef GODOT_CORE_API_GODOT_QUATERNION_TYPE_DEFINED
|
||||||
#define GODOT_CORE_API_GODOT_QUAT_TYPE_DEFINED
|
#define GODOT_CORE_API_GODOT_QUATERNION_TYPE_DEFINED
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t _dont_touch_that[GODOT_QUAT_SIZE];
|
uint8_t _dont_touch_that[GODOT_QUATERNION_SIZE];
|
||||||
} godot_quat;
|
} godot_quaternion;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gdnative/gdnative.h>
|
#include <gdnative/gdnative.h>
|
||||||
|
|
||||||
void GDAPI godot_quat_new(godot_quat *p_self);
|
void GDAPI godot_quaternion_new(godot_quaternion *p_self);
|
||||||
void GDAPI godot_quat_new_copy(godot_quat *r_dest, const godot_quat *p_src);
|
void GDAPI godot_quaternion_new_copy(godot_quaternion *r_dest, const godot_quaternion *p_src);
|
||||||
godot_real_t GDAPI *godot_quat_operator_index(godot_quat *p_self, godot_int p_index);
|
godot_real_t GDAPI *godot_quaternion_operator_index(godot_quaternion *p_self, godot_int p_index);
|
||||||
const godot_real_t GDAPI *godot_quat_operator_index_const(const godot_quat *p_self, godot_int p_index);
|
const godot_real_t GDAPI *godot_quaternion_operator_index_const(const godot_quaternion *p_self, godot_int p_index);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // GODOT_QUAT_H
|
#endif // GODOT_QUATERNION_H
|
@ -56,7 +56,7 @@ typedef enum godot_variant_type {
|
|||||||
GODOT_VARIANT_TYPE_VECTOR3I,
|
GODOT_VARIANT_TYPE_VECTOR3I,
|
||||||
GODOT_VARIANT_TYPE_TRANSFORM2D,
|
GODOT_VARIANT_TYPE_TRANSFORM2D,
|
||||||
GODOT_VARIANT_TYPE_PLANE,
|
GODOT_VARIANT_TYPE_PLANE,
|
||||||
GODOT_VARIANT_TYPE_QUAT,
|
GODOT_VARIANT_TYPE_QUATERNION,
|
||||||
GODOT_VARIANT_TYPE_AABB,
|
GODOT_VARIANT_TYPE_AABB,
|
||||||
GODOT_VARIANT_TYPE_BASIS,
|
GODOT_VARIANT_TYPE_BASIS,
|
||||||
GODOT_VARIANT_TYPE_TRANSFORM3D,
|
GODOT_VARIANT_TYPE_TRANSFORM3D,
|
||||||
@ -177,7 +177,7 @@ typedef void (*godot_ptr_utility_function)(void *r_return, const void **p_argume
|
|||||||
#include <gdnative/node_path.h>
|
#include <gdnative/node_path.h>
|
||||||
#include <gdnative/packed_arrays.h>
|
#include <gdnative/packed_arrays.h>
|
||||||
#include <gdnative/plane.h>
|
#include <gdnative/plane.h>
|
||||||
#include <gdnative/quat.h>
|
#include <gdnative/quaternion.h>
|
||||||
#include <gdnative/rect2.h>
|
#include <gdnative/rect2.h>
|
||||||
#include <gdnative/rid.h>
|
#include <gdnative/rid.h>
|
||||||
#include <gdnative/signal.h>
|
#include <gdnative/signal.h>
|
||||||
@ -208,7 +208,7 @@ void GDAPI godot_variant_new_vector3(godot_variant *r_dest, const godot_vector3
|
|||||||
void GDAPI godot_variant_new_vector3i(godot_variant *r_dest, const godot_vector3i *p_v3);
|
void GDAPI godot_variant_new_vector3i(godot_variant *r_dest, const godot_vector3i *p_v3);
|
||||||
void GDAPI godot_variant_new_transform2d(godot_variant *r_dest, const godot_transform2d *p_t2d);
|
void GDAPI godot_variant_new_transform2d(godot_variant *r_dest, const godot_transform2d *p_t2d);
|
||||||
void GDAPI godot_variant_new_plane(godot_variant *r_dest, const godot_plane *p_plane);
|
void GDAPI godot_variant_new_plane(godot_variant *r_dest, const godot_plane *p_plane);
|
||||||
void GDAPI godot_variant_new_quat(godot_variant *r_dest, const godot_quat *p_quat);
|
void GDAPI godot_variant_new_quaternion(godot_variant *r_dest, const godot_quaternion *p_quaternion);
|
||||||
void GDAPI godot_variant_new_aabb(godot_variant *r_dest, const godot_aabb *p_aabb);
|
void GDAPI godot_variant_new_aabb(godot_variant *r_dest, const godot_aabb *p_aabb);
|
||||||
void GDAPI godot_variant_new_basis(godot_variant *r_dest, const godot_basis *p_basis);
|
void GDAPI godot_variant_new_basis(godot_variant *r_dest, const godot_basis *p_basis);
|
||||||
void GDAPI godot_variant_new_transform3d(godot_variant *r_dest, const godot_transform3d *p_trans);
|
void GDAPI godot_variant_new_transform3d(godot_variant *r_dest, const godot_transform3d *p_trans);
|
||||||
@ -243,7 +243,7 @@ godot_vector3 GDAPI godot_variant_as_vector3(const godot_variant *p_self);
|
|||||||
godot_vector3i GDAPI godot_variant_as_vector3i(const godot_variant *p_self);
|
godot_vector3i GDAPI godot_variant_as_vector3i(const godot_variant *p_self);
|
||||||
godot_transform2d GDAPI godot_variant_as_transform2d(const godot_variant *p_self);
|
godot_transform2d GDAPI godot_variant_as_transform2d(const godot_variant *p_self);
|
||||||
godot_plane GDAPI godot_variant_as_plane(const godot_variant *p_self);
|
godot_plane GDAPI godot_variant_as_plane(const godot_variant *p_self);
|
||||||
godot_quat GDAPI godot_variant_as_quat(const godot_variant *p_self);
|
godot_quaternion GDAPI godot_variant_as_quaternion(const godot_variant *p_self);
|
||||||
godot_aabb GDAPI godot_variant_as_aabb(const godot_variant *p_self);
|
godot_aabb GDAPI godot_variant_as_aabb(const godot_variant *p_self);
|
||||||
godot_basis GDAPI godot_variant_as_basis(const godot_variant *p_self);
|
godot_basis GDAPI godot_variant_as_basis(const godot_variant *p_self);
|
||||||
godot_transform3d GDAPI godot_variant_as_transform3d(const godot_variant *p_self);
|
godot_transform3d GDAPI godot_variant_as_transform3d(const godot_variant *p_self);
|
||||||
|
@ -2825,7 +2825,7 @@ void GDScriptAnalyzer::reduce_subscript(GDScriptParser::SubscriptNode *p_subscri
|
|||||||
case Variant::RECT2:
|
case Variant::RECT2:
|
||||||
case Variant::RECT2I:
|
case Variant::RECT2I:
|
||||||
case Variant::PLANE:
|
case Variant::PLANE:
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
case Variant::AABB:
|
case Variant::AABB:
|
||||||
case Variant::OBJECT:
|
case Variant::OBJECT:
|
||||||
error = index_type.builtin_type != Variant::STRING;
|
error = index_type.builtin_type != Variant::STRING;
|
||||||
@ -2904,7 +2904,7 @@ void GDScriptAnalyzer::reduce_subscript(GDScriptParser::SubscriptNode *p_subscri
|
|||||||
case Variant::PACKED_FLOAT64_ARRAY:
|
case Variant::PACKED_FLOAT64_ARRAY:
|
||||||
case Variant::VECTOR2:
|
case Variant::VECTOR2:
|
||||||
case Variant::VECTOR3:
|
case Variant::VECTOR3:
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
result_type.builtin_type = Variant::FLOAT;
|
result_type.builtin_type = Variant::FLOAT;
|
||||||
break;
|
break;
|
||||||
// Return Color.
|
// Return Color.
|
||||||
|
@ -85,7 +85,7 @@ uint32_t GDScriptByteCodeGenerator::add_temporary(const GDScriptDataType &p_type
|
|||||||
case Variant::VECTOR3I:
|
case Variant::VECTOR3I:
|
||||||
case Variant::TRANSFORM2D:
|
case Variant::TRANSFORM2D:
|
||||||
case Variant::PLANE:
|
case Variant::PLANE:
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
case Variant::AABB:
|
case Variant::AABB:
|
||||||
case Variant::BASIS:
|
case Variant::BASIS:
|
||||||
case Variant::TRANSFORM3D:
|
case Variant::TRANSFORM3D:
|
||||||
@ -458,8 +458,8 @@ void GDScriptByteCodeGenerator::write_type_adjust(const Address &p_target, Varia
|
|||||||
case Variant::PLANE:
|
case Variant::PLANE:
|
||||||
append(GDScriptFunction::OPCODE_TYPE_ADJUST_PLANE, 1);
|
append(GDScriptFunction::OPCODE_TYPE_ADJUST_PLANE, 1);
|
||||||
break;
|
break;
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
append(GDScriptFunction::OPCODE_TYPE_ADJUST_QUAT, 1);
|
append(GDScriptFunction::OPCODE_TYPE_ADJUST_QUATERNION, 1);
|
||||||
break;
|
break;
|
||||||
case Variant::AABB:
|
case Variant::AABB:
|
||||||
append(GDScriptFunction::OPCODE_TYPE_ADJUST_AABB, 1);
|
append(GDScriptFunction::OPCODE_TYPE_ADJUST_AABB, 1);
|
||||||
@ -1105,7 +1105,7 @@ void GDScriptByteCodeGenerator::write_call_ptrcall(const Address &p_target, cons
|
|||||||
CASE_TYPE(STRING_NAME);
|
CASE_TYPE(STRING_NAME);
|
||||||
CASE_TYPE(NODE_PATH);
|
CASE_TYPE(NODE_PATH);
|
||||||
CASE_TYPE(RID);
|
CASE_TYPE(RID);
|
||||||
CASE_TYPE(QUAT);
|
CASE_TYPE(QUATERNION);
|
||||||
CASE_TYPE(OBJECT);
|
CASE_TYPE(OBJECT);
|
||||||
CASE_TYPE(CALLABLE);
|
CASE_TYPE(CALLABLE);
|
||||||
CASE_TYPE(SIGNAL);
|
CASE_TYPE(SIGNAL);
|
||||||
|
@ -625,7 +625,7 @@ void GDScriptFunction::disassemble(const Vector<String> &p_code_lines) const {
|
|||||||
DISASSEMBLE_PTRCALL(STRING_NAME);
|
DISASSEMBLE_PTRCALL(STRING_NAME);
|
||||||
DISASSEMBLE_PTRCALL(NODE_PATH);
|
DISASSEMBLE_PTRCALL(NODE_PATH);
|
||||||
DISASSEMBLE_PTRCALL(RID);
|
DISASSEMBLE_PTRCALL(RID);
|
||||||
DISASSEMBLE_PTRCALL(QUAT);
|
DISASSEMBLE_PTRCALL(QUATERNION);
|
||||||
DISASSEMBLE_PTRCALL(OBJECT);
|
DISASSEMBLE_PTRCALL(OBJECT);
|
||||||
DISASSEMBLE_PTRCALL(CALLABLE);
|
DISASSEMBLE_PTRCALL(CALLABLE);
|
||||||
DISASSEMBLE_PTRCALL(SIGNAL);
|
DISASSEMBLE_PTRCALL(SIGNAL);
|
||||||
@ -957,7 +957,7 @@ void GDScriptFunction::disassemble(const Vector<String> &p_code_lines) const {
|
|||||||
DISASSEMBLE_TYPE_ADJUST(VECTOR3I);
|
DISASSEMBLE_TYPE_ADJUST(VECTOR3I);
|
||||||
DISASSEMBLE_TYPE_ADJUST(TRANSFORM2D);
|
DISASSEMBLE_TYPE_ADJUST(TRANSFORM2D);
|
||||||
DISASSEMBLE_TYPE_ADJUST(PLANE);
|
DISASSEMBLE_TYPE_ADJUST(PLANE);
|
||||||
DISASSEMBLE_TYPE_ADJUST(QUAT);
|
DISASSEMBLE_TYPE_ADJUST(QUATERNION);
|
||||||
DISASSEMBLE_TYPE_ADJUST(AABB);
|
DISASSEMBLE_TYPE_ADJUST(AABB);
|
||||||
DISASSEMBLE_TYPE_ADJUST(BASIS);
|
DISASSEMBLE_TYPE_ADJUST(BASIS);
|
||||||
DISASSEMBLE_TYPE_ADJUST(TRANSFORM);
|
DISASSEMBLE_TYPE_ADJUST(TRANSFORM);
|
||||||
|
@ -278,7 +278,7 @@ public:
|
|||||||
OPCODE_CALL_PTRCALL_VECTOR3I,
|
OPCODE_CALL_PTRCALL_VECTOR3I,
|
||||||
OPCODE_CALL_PTRCALL_TRANSFORM2D,
|
OPCODE_CALL_PTRCALL_TRANSFORM2D,
|
||||||
OPCODE_CALL_PTRCALL_PLANE,
|
OPCODE_CALL_PTRCALL_PLANE,
|
||||||
OPCODE_CALL_PTRCALL_QUAT,
|
OPCODE_CALL_PTRCALL_QUATERNION,
|
||||||
OPCODE_CALL_PTRCALL_AABB,
|
OPCODE_CALL_PTRCALL_AABB,
|
||||||
OPCODE_CALL_PTRCALL_BASIS,
|
OPCODE_CALL_PTRCALL_BASIS,
|
||||||
OPCODE_CALL_PTRCALL_TRANSFORM3D,
|
OPCODE_CALL_PTRCALL_TRANSFORM3D,
|
||||||
@ -365,7 +365,7 @@ public:
|
|||||||
OPCODE_TYPE_ADJUST_VECTOR3I,
|
OPCODE_TYPE_ADJUST_VECTOR3I,
|
||||||
OPCODE_TYPE_ADJUST_TRANSFORM2D,
|
OPCODE_TYPE_ADJUST_TRANSFORM2D,
|
||||||
OPCODE_TYPE_ADJUST_PLANE,
|
OPCODE_TYPE_ADJUST_PLANE,
|
||||||
OPCODE_TYPE_ADJUST_QUAT,
|
OPCODE_TYPE_ADJUST_QUATERNION,
|
||||||
OPCODE_TYPE_ADJUST_AABB,
|
OPCODE_TYPE_ADJUST_AABB,
|
||||||
OPCODE_TYPE_ADJUST_BASIS,
|
OPCODE_TYPE_ADJUST_BASIS,
|
||||||
OPCODE_TYPE_ADJUST_TRANSFORM,
|
OPCODE_TYPE_ADJUST_TRANSFORM,
|
||||||
|
@ -61,7 +61,7 @@ Variant::Type GDScriptParser::get_builtin_type(const StringName &p_type) {
|
|||||||
builtin_types["Vector3i"] = Variant::VECTOR3I;
|
builtin_types["Vector3i"] = Variant::VECTOR3I;
|
||||||
builtin_types["AABB"] = Variant::AABB;
|
builtin_types["AABB"] = Variant::AABB;
|
||||||
builtin_types["Plane"] = Variant::PLANE;
|
builtin_types["Plane"] = Variant::PLANE;
|
||||||
builtin_types["Quat"] = Variant::QUAT;
|
builtin_types["Quaternion"] = Variant::QUATERNION;
|
||||||
builtin_types["Basis"] = Variant::BASIS;
|
builtin_types["Basis"] = Variant::BASIS;
|
||||||
builtin_types["Transform"] = Variant::TRANSFORM3D;
|
builtin_types["Transform"] = Variant::TRANSFORM3D;
|
||||||
builtin_types["Color"] = Variant::COLOR;
|
builtin_types["Color"] = Variant::COLOR;
|
||||||
|
@ -166,7 +166,7 @@ void (*type_init_function_table[])(Variant *) = {
|
|||||||
&VariantInitializer<Vector3i>::init, // VECTOR3I.
|
&VariantInitializer<Vector3i>::init, // VECTOR3I.
|
||||||
&VariantInitializer<Transform2D>::init, // TRANSFORM2D.
|
&VariantInitializer<Transform2D>::init, // TRANSFORM2D.
|
||||||
&VariantInitializer<Plane>::init, // PLANE.
|
&VariantInitializer<Plane>::init, // PLANE.
|
||||||
&VariantInitializer<Quat>::init, // QUAT.
|
&VariantInitializer<Quaternion>::init, // QUATERNION.
|
||||||
&VariantInitializer<AABB>::init, // AABB.
|
&VariantInitializer<AABB>::init, // AABB.
|
||||||
&VariantInitializer<Basis>::init, // BASIS.
|
&VariantInitializer<Basis>::init, // BASIS.
|
||||||
&VariantInitializer<Transform3D>::init, // TRANSFORM3D.
|
&VariantInitializer<Transform3D>::init, // TRANSFORM3D.
|
||||||
@ -248,7 +248,7 @@ void (*type_init_function_table[])(Variant *) = {
|
|||||||
&&OPCODE_CALL_PTRCALL_VECTOR3I, \
|
&&OPCODE_CALL_PTRCALL_VECTOR3I, \
|
||||||
&&OPCODE_CALL_PTRCALL_TRANSFORM2D, \
|
&&OPCODE_CALL_PTRCALL_TRANSFORM2D, \
|
||||||
&&OPCODE_CALL_PTRCALL_PLANE, \
|
&&OPCODE_CALL_PTRCALL_PLANE, \
|
||||||
&&OPCODE_CALL_PTRCALL_QUAT, \
|
&&OPCODE_CALL_PTRCALL_QUATERNION, \
|
||||||
&&OPCODE_CALL_PTRCALL_AABB, \
|
&&OPCODE_CALL_PTRCALL_AABB, \
|
||||||
&&OPCODE_CALL_PTRCALL_BASIS, \
|
&&OPCODE_CALL_PTRCALL_BASIS, \
|
||||||
&&OPCODE_CALL_PTRCALL_TRANSFORM3D, \
|
&&OPCODE_CALL_PTRCALL_TRANSFORM3D, \
|
||||||
@ -335,7 +335,7 @@ void (*type_init_function_table[])(Variant *) = {
|
|||||||
&&OPCODE_TYPE_ADJUST_VECTOR3I, \
|
&&OPCODE_TYPE_ADJUST_VECTOR3I, \
|
||||||
&&OPCODE_TYPE_ADJUST_TRANSFORM2D, \
|
&&OPCODE_TYPE_ADJUST_TRANSFORM2D, \
|
||||||
&&OPCODE_TYPE_ADJUST_PLANE, \
|
&&OPCODE_TYPE_ADJUST_PLANE, \
|
||||||
&&OPCODE_TYPE_ADJUST_QUAT, \
|
&&OPCODE_TYPE_ADJUST_QUATERNION, \
|
||||||
&&OPCODE_TYPE_ADJUST_AABB, \
|
&&OPCODE_TYPE_ADJUST_AABB, \
|
||||||
&&OPCODE_TYPE_ADJUST_BASIS, \
|
&&OPCODE_TYPE_ADJUST_BASIS, \
|
||||||
&&OPCODE_TYPE_ADJUST_TRANSFORM, \
|
&&OPCODE_TYPE_ADJUST_TRANSFORM, \
|
||||||
@ -398,7 +398,7 @@ void (*type_init_function_table[])(Variant *) = {
|
|||||||
#define OP_GET_VECTOR3I get_vector3i
|
#define OP_GET_VECTOR3I get_vector3i
|
||||||
#define OP_GET_RECT2 get_rect2
|
#define OP_GET_RECT2 get_rect2
|
||||||
#define OP_GET_RECT2I get_rect2i
|
#define OP_GET_RECT2I get_rect2i
|
||||||
#define OP_GET_QUAT get_quat
|
#define OP_GET_QUATERNION get_quaternion
|
||||||
#define OP_GET_COLOR get_color
|
#define OP_GET_COLOR get_color
|
||||||
#define OP_GET_STRING get_string
|
#define OP_GET_STRING get_string
|
||||||
#define OP_GET_STRING_NAME get_string_name
|
#define OP_GET_STRING_NAME get_string_name
|
||||||
@ -1733,7 +1733,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
|
|||||||
OPCODE_CALL_PTR(VECTOR3I);
|
OPCODE_CALL_PTR(VECTOR3I);
|
||||||
OPCODE_CALL_PTR(TRANSFORM2D);
|
OPCODE_CALL_PTR(TRANSFORM2D);
|
||||||
OPCODE_CALL_PTR(PLANE);
|
OPCODE_CALL_PTR(PLANE);
|
||||||
OPCODE_CALL_PTR(QUAT);
|
OPCODE_CALL_PTR(QUATERNION);
|
||||||
OPCODE_CALL_PTR(AABB);
|
OPCODE_CALL_PTR(AABB);
|
||||||
OPCODE_CALL_PTR(BASIS);
|
OPCODE_CALL_PTR(BASIS);
|
||||||
OPCODE_CALL_PTR(TRANSFORM3D);
|
OPCODE_CALL_PTR(TRANSFORM3D);
|
||||||
@ -3150,7 +3150,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
|
|||||||
OPCODE_TYPE_ADJUST(VECTOR3I, Vector3i);
|
OPCODE_TYPE_ADJUST(VECTOR3I, Vector3i);
|
||||||
OPCODE_TYPE_ADJUST(TRANSFORM2D, Transform2D);
|
OPCODE_TYPE_ADJUST(TRANSFORM2D, Transform2D);
|
||||||
OPCODE_TYPE_ADJUST(PLANE, Plane);
|
OPCODE_TYPE_ADJUST(PLANE, Plane);
|
||||||
OPCODE_TYPE_ADJUST(QUAT, Quat);
|
OPCODE_TYPE_ADJUST(QUATERNION, Quaternion);
|
||||||
OPCODE_TYPE_ADJUST(AABB, AABB);
|
OPCODE_TYPE_ADJUST(AABB, AABB);
|
||||||
OPCODE_TYPE_ADJUST(BASIS, Basis);
|
OPCODE_TYPE_ADJUST(BASIS, Basis);
|
||||||
OPCODE_TYPE_ADJUST(TRANSFORM, Transform3D);
|
OPCODE_TYPE_ADJUST(TRANSFORM, Transform3D);
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
</member>
|
</member>
|
||||||
<member name="parent" type="int" setter="set_parent" getter="get_parent" default="-1">
|
<member name="parent" type="int" setter="set_parent" getter="get_parent" default="-1">
|
||||||
</member>
|
</member>
|
||||||
<member name="rotation" type="Quat" setter="set_rotation" getter="get_rotation" default="Quat( 0, 0, 0, 1 )">
|
<member name="rotation" type="Quaternion" setter="set_rotation" getter="get_rotation" default="Quaternion( 0, 0, 0, 1 )">
|
||||||
</member>
|
</member>
|
||||||
<member name="scale" type="Vector3" setter="set_scale" getter="get_scale" default="Vector3( 1, 1, 1 )">
|
<member name="scale" type="Vector3" setter="set_scale" getter="get_scale" default="Vector3( 1, 1, 1 )">
|
||||||
</member>
|
</member>
|
||||||
|
@ -56,7 +56,7 @@ public:
|
|||||||
|
|
||||||
struct Track {
|
struct Track {
|
||||||
Channel<Vector3> translation_track;
|
Channel<Vector3> translation_track;
|
||||||
Channel<Quat> rotation_track;
|
Channel<Quaternion> rotation_track;
|
||||||
Channel<Vector3> scale_track;
|
Channel<Vector3> scale_track;
|
||||||
Vector<Channel<float>> weight_tracks;
|
Vector<Channel<float>> weight_tracks;
|
||||||
};
|
};
|
||||||
|
@ -342,19 +342,19 @@ static Vector3 _arr_to_vec3(const Array &p_array) {
|
|||||||
return Vector3(p_array[0], p_array[1], p_array[2]);
|
return Vector3(p_array[0], p_array[1], p_array[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Array _quat_to_array(const Quat &p_quat) {
|
static Array _quaternion_to_array(const Quaternion &p_quaternion) {
|
||||||
Array array;
|
Array array;
|
||||||
array.resize(4);
|
array.resize(4);
|
||||||
array[0] = p_quat.x;
|
array[0] = p_quaternion.x;
|
||||||
array[1] = p_quat.y;
|
array[1] = p_quaternion.y;
|
||||||
array[2] = p_quat.z;
|
array[2] = p_quaternion.z;
|
||||||
array[3] = p_quat.w;
|
array[3] = p_quaternion.w;
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Quat _arr_to_quat(const Array &p_array) {
|
static Quaternion _arr_to_quaternion(const Array &p_array) {
|
||||||
ERR_FAIL_COND_V(p_array.size() != 4, Quat());
|
ERR_FAIL_COND_V(p_array.size() != 4, Quaternion());
|
||||||
return Quat(p_array[0], p_array[1], p_array[2], p_array[3]);
|
return Quaternion(p_array[0], p_array[1], p_array[2], p_array[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Transform3D _arr_to_xform(const Array &p_array) {
|
static Transform3D _arr_to_xform(const Array &p_array) {
|
||||||
@ -425,8 +425,8 @@ Error GLTFDocument::_serialize_nodes(Ref<GLTFState> state) {
|
|||||||
node["matrix"] = _xform_to_array(n->xform);
|
node["matrix"] = _xform_to_array(n->xform);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!n->rotation.is_equal_approx(Quat())) {
|
if (!n->rotation.is_equal_approx(Quaternion())) {
|
||||||
node["rotation"] = _quat_to_array(n->rotation);
|
node["rotation"] = _quaternion_to_array(n->rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!n->scale.is_equal_approx(Vector3(1.0f, 1.0f, 1.0f))) {
|
if (!n->scale.is_equal_approx(Vector3(1.0f, 1.0f, 1.0f))) {
|
||||||
@ -591,13 +591,13 @@ Error GLTFDocument::_parse_nodes(Ref<GLTFState> state) {
|
|||||||
node->translation = _arr_to_vec3(n["translation"]);
|
node->translation = _arr_to_vec3(n["translation"]);
|
||||||
}
|
}
|
||||||
if (n.has("rotation")) {
|
if (n.has("rotation")) {
|
||||||
node->rotation = _arr_to_quat(n["rotation"]);
|
node->rotation = _arr_to_quaternion(n["rotation"]);
|
||||||
}
|
}
|
||||||
if (n.has("scale")) {
|
if (n.has("scale")) {
|
||||||
node->scale = _arr_to_vec3(n["scale"]);
|
node->scale = _arr_to_vec3(n["scale"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
node->xform.basis.set_quat_scale(node->rotation, node->scale);
|
node->xform.basis.set_quaternion_scale(node->rotation, node->scale);
|
||||||
node->xform.origin = node->translation;
|
node->xform.origin = node->translation;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1779,7 +1779,7 @@ GLTFAccessorIndex GLTFDocument::_encode_accessor_as_joints(Ref<GLTFState> state,
|
|||||||
return state->accessors.size() - 1;
|
return state->accessors.size() - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
GLTFAccessorIndex GLTFDocument::_encode_accessor_as_quats(Ref<GLTFState> state, const Vector<Quat> p_attribs, const bool p_for_vertex) {
|
GLTFAccessorIndex GLTFDocument::_encode_accessor_as_quaternions(Ref<GLTFState> state, const Vector<Quaternion> p_attribs, const bool p_for_vertex) {
|
||||||
if (p_attribs.size() == 0) {
|
if (p_attribs.size() == 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1794,11 +1794,11 @@ GLTFAccessorIndex GLTFDocument::_encode_accessor_as_quats(Ref<GLTFState> state,
|
|||||||
Vector<double> type_min;
|
Vector<double> type_min;
|
||||||
type_min.resize(element_count);
|
type_min.resize(element_count);
|
||||||
for (int i = 0; i < p_attribs.size(); i++) {
|
for (int i = 0; i < p_attribs.size(); i++) {
|
||||||
Quat quat = p_attribs[i];
|
Quaternion quaternion = p_attribs[i];
|
||||||
attribs.write[(i * element_count) + 0] = Math::snapped(quat.x, CMP_NORMALIZE_TOLERANCE);
|
attribs.write[(i * element_count) + 0] = Math::snapped(quaternion.x, CMP_NORMALIZE_TOLERANCE);
|
||||||
attribs.write[(i * element_count) + 1] = Math::snapped(quat.y, CMP_NORMALIZE_TOLERANCE);
|
attribs.write[(i * element_count) + 1] = Math::snapped(quaternion.y, CMP_NORMALIZE_TOLERANCE);
|
||||||
attribs.write[(i * element_count) + 2] = Math::snapped(quat.z, CMP_NORMALIZE_TOLERANCE);
|
attribs.write[(i * element_count) + 2] = Math::snapped(quaternion.z, CMP_NORMALIZE_TOLERANCE);
|
||||||
attribs.write[(i * element_count) + 3] = Math::snapped(quat.w, CMP_NORMALIZE_TOLERANCE);
|
attribs.write[(i * element_count) + 3] = Math::snapped(quaternion.w, CMP_NORMALIZE_TOLERANCE);
|
||||||
|
|
||||||
_calc_accessor_min_max(i, element_count, type_max, attribs, type_min);
|
_calc_accessor_min_max(i, element_count, type_max, attribs, type_min);
|
||||||
}
|
}
|
||||||
@ -2053,9 +2053,9 @@ Vector<Color> GLTFDocument::_decode_accessor_as_color(Ref<GLTFState> state, cons
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
Vector<Quat> GLTFDocument::_decode_accessor_as_quat(Ref<GLTFState> state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) {
|
Vector<Quaternion> GLTFDocument::_decode_accessor_as_quaternion(Ref<GLTFState> state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) {
|
||||||
const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex);
|
const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex);
|
||||||
Vector<Quat> ret;
|
Vector<Quaternion> ret;
|
||||||
|
|
||||||
if (attribs.size() == 0) {
|
if (attribs.size() == 0) {
|
||||||
return ret;
|
return ret;
|
||||||
@ -2067,7 +2067,7 @@ Vector<Quat> GLTFDocument::_decode_accessor_as_quat(Ref<GLTFState> state, const
|
|||||||
ret.resize(ret_size);
|
ret.resize(ret_size);
|
||||||
{
|
{
|
||||||
for (int i = 0; i < ret_size; i++) {
|
for (int i = 0; i < ret_size; i++) {
|
||||||
ret.write[i] = Quat(attribs_ptr[i * 4 + 0], attribs_ptr[i * 4 + 1], attribs_ptr[i * 4 + 2], attribs_ptr[i * 4 + 3]).normalized();
|
ret.write[i] = Quaternion(attribs_ptr[i * 4 + 0], attribs_ptr[i * 4 + 1], attribs_ptr[i * 4 + 2], attribs_ptr[i * 4 + 3]).normalized();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
@ -4607,8 +4607,8 @@ Error GLTFDocument::_serialize_animations(Ref<GLTFState> state) {
|
|||||||
s["interpolation"] = interpolation_to_string(track.rotation_track.interpolation);
|
s["interpolation"] = interpolation_to_string(track.rotation_track.interpolation);
|
||||||
Vector<real_t> times = Variant(track.rotation_track.times);
|
Vector<real_t> times = Variant(track.rotation_track.times);
|
||||||
s["input"] = _encode_accessor_as_floats(state, times, false);
|
s["input"] = _encode_accessor_as_floats(state, times, false);
|
||||||
Vector<Quat> values = track.rotation_track.values;
|
Vector<Quaternion> values = track.rotation_track.values;
|
||||||
s["output"] = _encode_accessor_as_quats(state, values, false);
|
s["output"] = _encode_accessor_as_quaternions(state, values, false);
|
||||||
|
|
||||||
samplers.push_back(s);
|
samplers.push_back(s);
|
||||||
|
|
||||||
@ -4777,7 +4777,7 @@ Error GLTFDocument::_parse_animations(Ref<GLTFState> state) {
|
|||||||
track->translation_track.times = Variant(times); //convert via variant
|
track->translation_track.times = Variant(times); //convert via variant
|
||||||
track->translation_track.values = Variant(translations); //convert via variant
|
track->translation_track.values = Variant(translations); //convert via variant
|
||||||
} else if (path == "rotation") {
|
} else if (path == "rotation") {
|
||||||
const Vector<Quat> rotations = _decode_accessor_as_quat(state, output, false);
|
const Vector<Quaternion> rotations = _decode_accessor_as_quaternion(state, output, false);
|
||||||
track->rotation_track.interpolation = interp;
|
track->rotation_track.interpolation = interp;
|
||||||
track->rotation_track.times = Variant(times); //convert via variant
|
track->rotation_track.times = Variant(times); //convert via variant
|
||||||
track->rotation_track.values = rotations;
|
track->rotation_track.values = rotations;
|
||||||
@ -5077,7 +5077,7 @@ GLTFSkeletonIndex GLTFDocument::_convert_skeleton(Ref<GLTFState> state, Skeleton
|
|||||||
void GLTFDocument::_convert_spatial(Ref<GLTFState> state, Node3D *p_spatial, Ref<GLTFNode> p_node) {
|
void GLTFDocument::_convert_spatial(Ref<GLTFState> state, Node3D *p_spatial, Ref<GLTFNode> p_node) {
|
||||||
Transform3D xform = p_spatial->get_transform();
|
Transform3D xform = p_spatial->get_transform();
|
||||||
p_node->scale = xform.basis.get_scale();
|
p_node->scale = xform.basis.get_scale();
|
||||||
p_node->rotation = xform.basis.get_rotation_quat();
|
p_node->rotation = xform.basis.get_rotation_quaternion();
|
||||||
p_node->translation = xform.origin;
|
p_node->translation = xform.origin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5274,9 +5274,9 @@ void GLTFDocument::_convert_mult_mesh_instance_to_gltf(Node *p_scene_parent, con
|
|||||||
transform.origin =
|
transform.origin =
|
||||||
Vector3(xform_2d.get_origin().x, 0, xform_2d.get_origin().y);
|
Vector3(xform_2d.get_origin().x, 0, xform_2d.get_origin().y);
|
||||||
real_t rotation = xform_2d.get_rotation();
|
real_t rotation = xform_2d.get_rotation();
|
||||||
Quat quat(Vector3(0, 1, 0), rotation);
|
Quaternion quaternion(Vector3(0, 1, 0), rotation);
|
||||||
Size2 scale = xform_2d.get_scale();
|
Size2 scale = xform_2d.get_scale();
|
||||||
transform.basis.set_quat_scale(quat,
|
transform.basis.set_quaternion_scale(quaternion,
|
||||||
Vector3(scale.x, 0, scale.y));
|
Vector3(scale.x, 0, scale.y));
|
||||||
transform =
|
transform =
|
||||||
multi_mesh_instance->get_transform() * transform;
|
multi_mesh_instance->get_transform() * transform;
|
||||||
@ -5516,24 +5516,24 @@ struct EditorSceneImporterGLTFInterpolate {
|
|||||||
|
|
||||||
// thank you for existing, partial specialization
|
// thank you for existing, partial specialization
|
||||||
template <>
|
template <>
|
||||||
struct EditorSceneImporterGLTFInterpolate<Quat> {
|
struct EditorSceneImporterGLTFInterpolate<Quaternion> {
|
||||||
Quat lerp(const Quat &a, const Quat &b, const float c) const {
|
Quaternion lerp(const Quaternion &a, const Quaternion &b, const float c) const {
|
||||||
ERR_FAIL_COND_V_MSG(!a.is_normalized(), Quat(), "The quaternion \"a\" must be normalized.");
|
ERR_FAIL_COND_V_MSG(!a.is_normalized(), Quaternion(), "The quaternion \"a\" must be normalized.");
|
||||||
ERR_FAIL_COND_V_MSG(!b.is_normalized(), Quat(), "The quaternion \"b\" must be normalized.");
|
ERR_FAIL_COND_V_MSG(!b.is_normalized(), Quaternion(), "The quaternion \"b\" must be normalized.");
|
||||||
|
|
||||||
return a.slerp(b, c).normalized();
|
return a.slerp(b, c).normalized();
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat catmull_rom(const Quat &p0, const Quat &p1, const Quat &p2, const Quat &p3, const float c) {
|
Quaternion catmull_rom(const Quaternion &p0, const Quaternion &p1, const Quaternion &p2, const Quaternion &p3, const float c) {
|
||||||
ERR_FAIL_COND_V_MSG(!p1.is_normalized(), Quat(), "The quaternion \"p1\" must be normalized.");
|
ERR_FAIL_COND_V_MSG(!p1.is_normalized(), Quaternion(), "The quaternion \"p1\" must be normalized.");
|
||||||
ERR_FAIL_COND_V_MSG(!p2.is_normalized(), Quat(), "The quaternion \"p2\" must be normalized.");
|
ERR_FAIL_COND_V_MSG(!p2.is_normalized(), Quaternion(), "The quaternion \"p2\" must be normalized.");
|
||||||
|
|
||||||
return p1.slerp(p2, c).normalized();
|
return p1.slerp(p2, c).normalized();
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat bezier(const Quat start, const Quat control_1, const Quat control_2, const Quat end, const float t) {
|
Quaternion bezier(const Quaternion start, const Quaternion control_1, const Quaternion control_2, const Quaternion end, const float t) {
|
||||||
ERR_FAIL_COND_V_MSG(!start.is_normalized(), Quat(), "The start quaternion must be normalized.");
|
ERR_FAIL_COND_V_MSG(!start.is_normalized(), Quaternion(), "The start quaternion must be normalized.");
|
||||||
ERR_FAIL_COND_V_MSG(!end.is_normalized(), Quat(), "The end quaternion must be normalized.");
|
ERR_FAIL_COND_V_MSG(!end.is_normalized(), Quaternion(), "The end quaternion must be normalized.");
|
||||||
|
|
||||||
return start.slerp(end, t).normalized();
|
return start.slerp(end, t).normalized();
|
||||||
}
|
}
|
||||||
@ -5681,7 +5681,7 @@ void GLTFDocument::_import_animation(Ref<GLTFState> state, AnimationPlayer *ap,
|
|||||||
double time = 0.0;
|
double time = 0.0;
|
||||||
|
|
||||||
Vector3 base_pos;
|
Vector3 base_pos;
|
||||||
Quat base_rot;
|
Quaternion base_rot;
|
||||||
Vector3 base_scale = Vector3(1, 1, 1);
|
Vector3 base_scale = Vector3(1, 1, 1);
|
||||||
|
|
||||||
if (!track.rotation_track.values.size()) {
|
if (!track.rotation_track.values.size()) {
|
||||||
@ -5699,7 +5699,7 @@ void GLTFDocument::_import_animation(Ref<GLTFState> state, AnimationPlayer *ap,
|
|||||||
bool last = false;
|
bool last = false;
|
||||||
while (true) {
|
while (true) {
|
||||||
Vector3 pos = base_pos;
|
Vector3 pos = base_pos;
|
||||||
Quat rot = base_rot;
|
Quaternion rot = base_rot;
|
||||||
Vector3 scale = base_scale;
|
Vector3 scale = base_scale;
|
||||||
|
|
||||||
if (track.translation_track.times.size()) {
|
if (track.translation_track.times.size()) {
|
||||||
@ -5707,7 +5707,7 @@ void GLTFDocument::_import_animation(Ref<GLTFState> state, AnimationPlayer *ap,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (track.rotation_track.times.size()) {
|
if (track.rotation_track.times.size()) {
|
||||||
rot = _interpolate_track<Quat>(track.rotation_track.times, track.rotation_track.values, time, track.rotation_track.interpolation);
|
rot = _interpolate_track<Quaternion>(track.rotation_track.times, track.rotation_track.values, time, track.rotation_track.interpolation);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (track.scale_track.times.size()) {
|
if (track.scale_track.times.size()) {
|
||||||
@ -5716,14 +5716,14 @@ void GLTFDocument::_import_animation(Ref<GLTFState> state, AnimationPlayer *ap,
|
|||||||
|
|
||||||
if (gltf_node->skeleton >= 0) {
|
if (gltf_node->skeleton >= 0) {
|
||||||
Transform3D xform;
|
Transform3D xform;
|
||||||
xform.basis.set_quat_scale(rot, scale);
|
xform.basis.set_quaternion_scale(rot, scale);
|
||||||
xform.origin = pos;
|
xform.origin = pos;
|
||||||
|
|
||||||
const Skeleton3D *skeleton = state->skeletons[gltf_node->skeleton]->godot_skeleton;
|
const Skeleton3D *skeleton = state->skeletons[gltf_node->skeleton]->godot_skeleton;
|
||||||
const int bone_idx = skeleton->find_bone(gltf_node->get_name());
|
const int bone_idx = skeleton->find_bone(gltf_node->get_name());
|
||||||
xform = skeleton->get_bone_rest(bone_idx).affine_inverse() * xform;
|
xform = skeleton->get_bone_rest(bone_idx).affine_inverse() * xform;
|
||||||
|
|
||||||
rot = xform.basis.get_rotation_quat();
|
rot = xform.basis.get_rotation_quaternion();
|
||||||
rot.normalize();
|
rot.normalize();
|
||||||
scale = xform.basis.get_scale();
|
scale = xform.basis.get_scale();
|
||||||
pos = xform.origin;
|
pos = xform.origin;
|
||||||
@ -5810,7 +5810,7 @@ void GLTFDocument::_convert_mesh_instances(Ref<GLTFState> state) {
|
|||||||
ERR_CONTINUE(!mi);
|
ERR_CONTINUE(!mi);
|
||||||
Transform3D mi_xform = mi->get_transform();
|
Transform3D mi_xform = mi->get_transform();
|
||||||
node->scale = mi_xform.basis.get_scale();
|
node->scale = mi_xform.basis.get_scale();
|
||||||
node->rotation = mi_xform.basis.get_rotation_quat();
|
node->rotation = mi_xform.basis.get_rotation_quaternion();
|
||||||
node->translation = mi_xform.origin;
|
node->translation = mi_xform.origin;
|
||||||
|
|
||||||
Dictionary json_skin;
|
Dictionary json_skin;
|
||||||
@ -5874,7 +5874,7 @@ void GLTFDocument::_convert_mesh_instances(Ref<GLTFState> state) {
|
|||||||
|
|
||||||
Transform3D bone_rest_xform = skeleton->get_bone_rest(bone_index);
|
Transform3D bone_rest_xform = skeleton->get_bone_rest(bone_index);
|
||||||
joint_node->scale = bone_rest_xform.basis.get_scale();
|
joint_node->scale = bone_rest_xform.basis.get_scale();
|
||||||
joint_node->rotation = bone_rest_xform.basis.get_rotation_quat();
|
joint_node->rotation = bone_rest_xform.basis.get_rotation_quaternion();
|
||||||
joint_node->translation = bone_rest_xform.origin;
|
joint_node->translation = bone_rest_xform.origin;
|
||||||
joint_node->joint = true;
|
joint_node->joint = true;
|
||||||
|
|
||||||
@ -6036,16 +6036,16 @@ GLTFAnimation::Track GLTFDocument::_convert_animation_track(Ref<GLTFState> state
|
|||||||
p_track.rotation_track.interpolation = gltf_interpolation;
|
p_track.rotation_track.interpolation = gltf_interpolation;
|
||||||
for (int32_t key_i = 0; key_i < key_count; key_i++) {
|
for (int32_t key_i = 0; key_i < key_count; key_i++) {
|
||||||
Vector3 translation;
|
Vector3 translation;
|
||||||
Quat rotation;
|
Quaternion rotation;
|
||||||
Vector3 scale;
|
Vector3 scale;
|
||||||
Error err = p_animation->transform_track_get_key(p_track_i, key_i, &translation, &rotation, &scale);
|
Error err = p_animation->transform_track_get_key(p_track_i, key_i, &translation, &rotation, &scale);
|
||||||
ERR_CONTINUE(err != OK);
|
ERR_CONTINUE(err != OK);
|
||||||
Transform3D xform;
|
Transform3D xform;
|
||||||
xform.basis.set_quat_scale(rotation, scale);
|
xform.basis.set_quaternion_scale(rotation, scale);
|
||||||
xform.origin = translation;
|
xform.origin = translation;
|
||||||
xform = p_bone_rest * xform;
|
xform = p_bone_rest * xform;
|
||||||
p_track.translation_track.values.write[key_i] = xform.get_origin();
|
p_track.translation_track.values.write[key_i] = xform.get_origin();
|
||||||
p_track.rotation_track.values.write[key_i] = xform.basis.get_rotation_quat();
|
p_track.rotation_track.values.write[key_i] = xform.basis.get_rotation_quaternion();
|
||||||
p_track.scale_track.values.write[key_i] = xform.basis.get_scale();
|
p_track.scale_track.values.write[key_i] = xform.basis.get_scale();
|
||||||
}
|
}
|
||||||
} else if (path.find(":transform") != -1) {
|
} else if (path.find(":transform") != -1) {
|
||||||
@ -6065,7 +6065,7 @@ GLTFAnimation::Track GLTFDocument::_convert_animation_track(Ref<GLTFState> state
|
|||||||
for (int32_t key_i = 0; key_i < key_count; key_i++) {
|
for (int32_t key_i = 0; key_i < key_count; key_i++) {
|
||||||
Transform3D xform = p_animation->track_get_key_value(p_track_i, key_i);
|
Transform3D xform = p_animation->track_get_key_value(p_track_i, key_i);
|
||||||
p_track.translation_track.values.write[key_i] = xform.get_origin();
|
p_track.translation_track.values.write[key_i] = xform.get_origin();
|
||||||
p_track.rotation_track.values.write[key_i] = xform.basis.get_rotation_quat();
|
p_track.rotation_track.values.write[key_i] = xform.basis.get_rotation_quaternion();
|
||||||
p_track.scale_track.values.write[key_i] = xform.basis.get_scale();
|
p_track.scale_track.values.write[key_i] = xform.basis.get_scale();
|
||||||
}
|
}
|
||||||
} else if (track_type == Animation::TYPE_VALUE) {
|
} else if (track_type == Animation::TYPE_VALUE) {
|
||||||
@ -6077,7 +6077,7 @@ GLTFAnimation::Track GLTFDocument::_convert_animation_track(Ref<GLTFState> state
|
|||||||
p_track.rotation_track.interpolation = gltf_interpolation;
|
p_track.rotation_track.interpolation = gltf_interpolation;
|
||||||
|
|
||||||
for (int32_t key_i = 0; key_i < key_count; key_i++) {
|
for (int32_t key_i = 0; key_i < key_count; key_i++) {
|
||||||
Quat rotation_track = p_animation->track_get_key_value(p_track_i, key_i);
|
Quaternion rotation_track = p_animation->track_get_key_value(p_track_i, key_i);
|
||||||
p_track.rotation_track.values.write[key_i] = rotation_track;
|
p_track.rotation_track.values.write[key_i] = rotation_track;
|
||||||
}
|
}
|
||||||
} else if (path.find(":translation") != -1) {
|
} else if (path.find(":translation") != -1) {
|
||||||
@ -6104,7 +6104,7 @@ GLTFAnimation::Track GLTFDocument::_convert_animation_track(Ref<GLTFState> state
|
|||||||
rotation_radian.x = Math::deg2rad(rotation_degrees.x);
|
rotation_radian.x = Math::deg2rad(rotation_degrees.x);
|
||||||
rotation_radian.y = Math::deg2rad(rotation_degrees.y);
|
rotation_radian.y = Math::deg2rad(rotation_degrees.y);
|
||||||
rotation_radian.z = Math::deg2rad(rotation_degrees.z);
|
rotation_radian.z = Math::deg2rad(rotation_degrees.z);
|
||||||
p_track.rotation_track.values.write[key_i] = Quat(rotation_radian);
|
p_track.rotation_track.values.write[key_i] = Quaternion(rotation_radian);
|
||||||
}
|
}
|
||||||
} else if (path.find(":scale") != -1) {
|
} else if (path.find(":scale") != -1) {
|
||||||
p_track.scale_track.times = times;
|
p_track.scale_track.times = times;
|
||||||
|
@ -205,7 +205,7 @@ private:
|
|||||||
Vector<Color> _decode_accessor_as_color(Ref<GLTFState> state,
|
Vector<Color> _decode_accessor_as_color(Ref<GLTFState> state,
|
||||||
const GLTFAccessorIndex p_accessor,
|
const GLTFAccessorIndex p_accessor,
|
||||||
const bool p_for_vertex);
|
const bool p_for_vertex);
|
||||||
Vector<Quat> _decode_accessor_as_quat(Ref<GLTFState> state,
|
Vector<Quaternion> _decode_accessor_as_quaternion(Ref<GLTFState> state,
|
||||||
const GLTFAccessorIndex p_accessor,
|
const GLTFAccessorIndex p_accessor,
|
||||||
const bool p_for_vertex);
|
const bool p_for_vertex);
|
||||||
Vector<Transform2D> _decode_accessor_as_xform2d(Ref<GLTFState> state,
|
Vector<Transform2D> _decode_accessor_as_xform2d(Ref<GLTFState> state,
|
||||||
@ -273,8 +273,8 @@ private:
|
|||||||
T _interpolate_track(const Vector<float> &p_times, const Vector<T> &p_values,
|
T _interpolate_track(const Vector<float> &p_times, const Vector<T> &p_values,
|
||||||
const float p_time,
|
const float p_time,
|
||||||
const GLTFAnimation::Interpolation p_interp);
|
const GLTFAnimation::Interpolation p_interp);
|
||||||
GLTFAccessorIndex _encode_accessor_as_quats(Ref<GLTFState> state,
|
GLTFAccessorIndex _encode_accessor_as_quaternions(Ref<GLTFState> state,
|
||||||
const Vector<Quat> p_attribs,
|
const Vector<Quaternion> p_attribs,
|
||||||
const bool p_for_vertex);
|
const bool p_for_vertex);
|
||||||
GLTFAccessorIndex _encode_accessor_as_weights(Ref<GLTFState> state,
|
GLTFAccessorIndex _encode_accessor_as_weights(Ref<GLTFState> state,
|
||||||
const Vector<Color> p_attribs,
|
const Vector<Color> p_attribs,
|
||||||
|
@ -67,7 +67,7 @@ void GLTFNode::_bind_methods() {
|
|||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "skeleton"), "set_skeleton", "get_skeleton"); // GLTFSkeletonIndex
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "skeleton"), "set_skeleton", "get_skeleton"); // GLTFSkeletonIndex
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "joint"), "set_joint", "get_joint"); // bool
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "joint"), "set_joint", "get_joint"); // bool
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "translation"), "set_translation", "get_translation"); // Vector3
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "translation"), "set_translation", "get_translation"); // Vector3
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::QUAT, "rotation"), "set_rotation", "get_rotation"); // Quat
|
ADD_PROPERTY(PropertyInfo(Variant::QUATERNION, "rotation"), "set_rotation", "get_rotation"); // Quaternion
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "scale"), "set_scale", "get_scale"); // Vector3
|
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "scale"), "set_scale", "get_scale"); // Vector3
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::PACKED_INT32_ARRAY, "children"), "set_children", "get_children"); // Vector<int>
|
ADD_PROPERTY(PropertyInfo(Variant::PACKED_INT32_ARRAY, "children"), "set_children", "get_children"); // Vector<int>
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "light"), "set_light", "get_light"); // GLTFLightIndex
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "light"), "set_light", "get_light"); // GLTFLightIndex
|
||||||
@ -145,11 +145,11 @@ void GLTFNode::set_translation(Vector3 p_translation) {
|
|||||||
translation = p_translation;
|
translation = p_translation;
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat GLTFNode::get_rotation() {
|
Quaternion GLTFNode::get_rotation() {
|
||||||
return rotation;
|
return rotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLTFNode::set_rotation(Quat p_rotation) {
|
void GLTFNode::set_rotation(Quaternion p_rotation) {
|
||||||
rotation = p_rotation;
|
rotation = p_rotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ private:
|
|||||||
GLTFSkeletonIndex skeleton = -1;
|
GLTFSkeletonIndex skeleton = -1;
|
||||||
bool joint = false;
|
bool joint = false;
|
||||||
Vector3 translation;
|
Vector3 translation;
|
||||||
Quat rotation;
|
Quaternion rotation;
|
||||||
Vector3 scale = Vector3(1, 1, 1);
|
Vector3 scale = Vector3(1, 1, 1);
|
||||||
Vector<int> children;
|
Vector<int> children;
|
||||||
GLTFLightIndex light = -1;
|
GLTFLightIndex light = -1;
|
||||||
@ -86,8 +86,8 @@ public:
|
|||||||
Vector3 get_translation();
|
Vector3 get_translation();
|
||||||
void set_translation(Vector3 p_translation);
|
void set_translation(Vector3 p_translation);
|
||||||
|
|
||||||
Quat get_rotation();
|
Quaternion get_rotation();
|
||||||
void set_rotation(Quat p_rotation);
|
void set_rotation(Quaternion p_rotation);
|
||||||
|
|
||||||
Vector3 get_scale();
|
Vector3 get_scale();
|
||||||
void set_scale(Vector3 p_scale);
|
void set_scale(Vector3 p_scale);
|
||||||
|
@ -185,8 +185,8 @@ void MobileVRInterface::set_position_from_sensors() {
|
|||||||
// if you have a gyro + accelerometer that combo tends to be better than combining all three but without a gyro you need the magnetometer..
|
// if you have a gyro + accelerometer that combo tends to be better than combining all three but without a gyro you need the magnetometer..
|
||||||
if (has_magneto && has_grav && !has_gyro) {
|
if (has_magneto && has_grav && !has_gyro) {
|
||||||
// convert to quaternions, easier to smooth those out
|
// convert to quaternions, easier to smooth those out
|
||||||
Quat transform_quat(orientation);
|
Quaternion transform_quat(orientation);
|
||||||
Quat acc_mag_quat(combine_acc_mag(grav, magneto));
|
Quaternion acc_mag_quat(combine_acc_mag(grav, magneto));
|
||||||
transform_quat = transform_quat.slerp(acc_mag_quat, 0.1);
|
transform_quat = transform_quat.slerp(acc_mag_quat, 0.1);
|
||||||
orientation = Basis(transform_quat);
|
orientation = Basis(transform_quat);
|
||||||
|
|
||||||
|
@ -496,7 +496,7 @@ static String variant_type_to_managed_name(const String &p_var_type_name) {
|
|||||||
Variant::VECTOR3I,
|
Variant::VECTOR3I,
|
||||||
Variant::TRANSFORM2D,
|
Variant::TRANSFORM2D,
|
||||||
Variant::PLANE,
|
Variant::PLANE,
|
||||||
Variant::QUAT,
|
Variant::QUATERNION,
|
||||||
Variant::AABB,
|
Variant::AABB,
|
||||||
Variant::BASIS,
|
Variant::BASIS,
|
||||||
Variant::TRANSFORM3D,
|
Variant::TRANSFORM3D,
|
||||||
|
@ -2523,7 +2523,7 @@ bool BindingsGenerator::_arg_default_value_is_assignable_to_type(const Variant &
|
|||||||
case Variant::TRANSFORM2D:
|
case Variant::TRANSFORM2D:
|
||||||
case Variant::TRANSFORM3D:
|
case Variant::TRANSFORM3D:
|
||||||
case Variant::BASIS:
|
case Variant::BASIS:
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
case Variant::PLANE:
|
case Variant::PLANE:
|
||||||
case Variant::AABB:
|
case Variant::AABB:
|
||||||
case Variant::COLOR:
|
case Variant::COLOR:
|
||||||
@ -3142,12 +3142,12 @@ bool BindingsGenerator::_arg_default_value_from_variant(const Variant &p_val, Ar
|
|||||||
}
|
}
|
||||||
r_iarg.def_param_mode = ArgumentInterface::NULLABLE_VAL;
|
r_iarg.def_param_mode = ArgumentInterface::NULLABLE_VAL;
|
||||||
} break;
|
} break;
|
||||||
case Variant::QUAT: {
|
case Variant::QUATERNION: {
|
||||||
Quat quat = p_val.operator Quat();
|
Quaternion quaternion = p_val.operator Quaternion();
|
||||||
if (quat == Quat()) {
|
if (quaternion == Quaternion()) {
|
||||||
r_iarg.default_argument = "Quat.Identity";
|
r_iarg.default_argument = "Quaternion.Identity";
|
||||||
} else {
|
} else {
|
||||||
r_iarg.default_argument = "new Quat" + quat.operator String();
|
r_iarg.default_argument = "new Quaternion" + quaternion.operator String();
|
||||||
}
|
}
|
||||||
r_iarg.def_param_mode = ArgumentInterface::NULLABLE_VAL;
|
r_iarg.def_param_mode = ArgumentInterface::NULLABLE_VAL;
|
||||||
} break;
|
} break;
|
||||||
@ -3196,7 +3196,7 @@ void BindingsGenerator::_populate_builtin_type_interfaces() {
|
|||||||
INSERT_STRUCT_TYPE(Vector3)
|
INSERT_STRUCT_TYPE(Vector3)
|
||||||
INSERT_STRUCT_TYPE(Vector3i)
|
INSERT_STRUCT_TYPE(Vector3i)
|
||||||
INSERT_STRUCT_TYPE(Basis)
|
INSERT_STRUCT_TYPE(Basis)
|
||||||
INSERT_STRUCT_TYPE(Quat)
|
INSERT_STRUCT_TYPE(Quaternion)
|
||||||
INSERT_STRUCT_TYPE(Transform3D)
|
INSERT_STRUCT_TYPE(Transform3D)
|
||||||
INSERT_STRUCT_TYPE(AABB)
|
INSERT_STRUCT_TYPE(AABB)
|
||||||
INSERT_STRUCT_TYPE(Color)
|
INSERT_STRUCT_TYPE(Color)
|
||||||
|
@ -207,7 +207,7 @@ namespace Godot
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Quat RotationQuat()
|
public Quaternion RotationQuaternion()
|
||||||
{
|
{
|
||||||
Basis orthonormalizedBasis = Orthonormalized();
|
Basis orthonormalizedBasis = Orthonormalized();
|
||||||
real_t det = orthonormalizedBasis.Determinant();
|
real_t det = orthonormalizedBasis.Determinant();
|
||||||
@ -218,18 +218,18 @@ namespace Godot
|
|||||||
orthonormalizedBasis = orthonormalizedBasis.Scaled(-Vector3.One);
|
orthonormalizedBasis = orthonormalizedBasis.Scaled(-Vector3.One);
|
||||||
}
|
}
|
||||||
|
|
||||||
return orthonormalizedBasis.Quat();
|
return orthonormalizedBasis.Quaternion();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void SetQuatScale(Quat quat, Vector3 scale)
|
internal void SetQuaternionScale(Quaternion quaternion, Vector3 scale)
|
||||||
{
|
{
|
||||||
SetDiagonal(scale);
|
SetDiagonal(scale);
|
||||||
Rotate(quat);
|
Rotate(quaternion);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Rotate(Quat quat)
|
private void Rotate(Quaternion quaternion)
|
||||||
{
|
{
|
||||||
this *= new Basis(quat);
|
this *= new Basis(quaternion);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetDiagonal(Vector3 diagonal)
|
private void SetDiagonal(Vector3 diagonal)
|
||||||
@ -263,8 +263,8 @@ namespace Godot
|
|||||||
/// The returned vector contains the rotation angles in
|
/// The returned vector contains the rotation angles in
|
||||||
/// the format (X angle, Y angle, Z angle).
|
/// the format (X angle, Y angle, Z angle).
|
||||||
///
|
///
|
||||||
/// Consider using the <see cref="Basis.Quat()"/> method instead, which
|
/// Consider using the <see cref="Basis.Quaternion()"/> method instead, which
|
||||||
/// returns a <see cref="Godot.Quat"/> quaternion instead of Euler angles.
|
/// returns a <see cref="Godot.Quaternion"/> quaternion instead of Euler angles.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>A Vector3 representing the basis rotation in Euler angles.</returns>
|
/// <returns>A Vector3 representing the basis rotation in Euler angles.</returns>
|
||||||
public Vector3 GetEuler()
|
public Vector3 GetEuler()
|
||||||
@ -486,8 +486,8 @@ namespace Godot
|
|||||||
/// <returns>The resulting basis matrix of the interpolation.</returns>
|
/// <returns>The resulting basis matrix of the interpolation.</returns>
|
||||||
public Basis Slerp(Basis target, real_t weight)
|
public Basis Slerp(Basis target, real_t weight)
|
||||||
{
|
{
|
||||||
Quat from = new Quat(this);
|
Quaternion from = new Quaternion(this);
|
||||||
Quat to = new Quat(target);
|
Quaternion to = new Quaternion(target);
|
||||||
|
|
||||||
Basis b = new Basis(from.Slerp(to, weight));
|
Basis b = new Basis(from.Slerp(to, weight));
|
||||||
b.Row0 *= Mathf.Lerp(Row0.Length(), target.Row0.Length(), weight);
|
b.Row0 *= Mathf.Lerp(Row0.Length(), target.Row0.Length(), weight);
|
||||||
@ -588,8 +588,8 @@ namespace Godot
|
|||||||
/// See <see cref="GetEuler()"/> if you need Euler angles, but keep in
|
/// See <see cref="GetEuler()"/> if you need Euler angles, but keep in
|
||||||
/// mind that quaternions should generally be preferred to Euler angles.
|
/// mind that quaternions should generally be preferred to Euler angles.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>A <see cref="Godot.Quat"/> representing the basis's rotation.</returns>
|
/// <returns>A <see cref="Godot.Quaternion"/> representing the basis's rotation.</returns>
|
||||||
public Quat Quat()
|
public Quaternion Quaternion()
|
||||||
{
|
{
|
||||||
real_t trace = Row0[0] + Row1[1] + Row2[2];
|
real_t trace = Row0[0] + Row1[1] + Row2[2];
|
||||||
|
|
||||||
@ -597,7 +597,7 @@ namespace Godot
|
|||||||
{
|
{
|
||||||
real_t s = Mathf.Sqrt(trace + 1.0f) * 2f;
|
real_t s = Mathf.Sqrt(trace + 1.0f) * 2f;
|
||||||
real_t inv_s = 1f / s;
|
real_t inv_s = 1f / s;
|
||||||
return new Quat(
|
return new Quaternion(
|
||||||
(Row2[1] - Row1[2]) * inv_s,
|
(Row2[1] - Row1[2]) * inv_s,
|
||||||
(Row0[2] - Row2[0]) * inv_s,
|
(Row0[2] - Row2[0]) * inv_s,
|
||||||
(Row1[0] - Row0[1]) * inv_s,
|
(Row1[0] - Row0[1]) * inv_s,
|
||||||
@ -609,7 +609,7 @@ namespace Godot
|
|||||||
{
|
{
|
||||||
real_t s = Mathf.Sqrt(Row0[0] - Row1[1] - Row2[2] + 1.0f) * 2f;
|
real_t s = Mathf.Sqrt(Row0[0] - Row1[1] - Row2[2] + 1.0f) * 2f;
|
||||||
real_t inv_s = 1f / s;
|
real_t inv_s = 1f / s;
|
||||||
return new Quat(
|
return new Quaternion(
|
||||||
s * 0.25f,
|
s * 0.25f,
|
||||||
(Row0[1] + Row1[0]) * inv_s,
|
(Row0[1] + Row1[0]) * inv_s,
|
||||||
(Row0[2] + Row2[0]) * inv_s,
|
(Row0[2] + Row2[0]) * inv_s,
|
||||||
@ -621,7 +621,7 @@ namespace Godot
|
|||||||
{
|
{
|
||||||
real_t s = Mathf.Sqrt(-Row0[0] + Row1[1] - Row2[2] + 1.0f) * 2f;
|
real_t s = Mathf.Sqrt(-Row0[0] + Row1[1] - Row2[2] + 1.0f) * 2f;
|
||||||
real_t inv_s = 1f / s;
|
real_t inv_s = 1f / s;
|
||||||
return new Quat(
|
return new Quaternion(
|
||||||
(Row0[1] + Row1[0]) * inv_s,
|
(Row0[1] + Row1[0]) * inv_s,
|
||||||
s * 0.25f,
|
s * 0.25f,
|
||||||
(Row1[2] + Row2[1]) * inv_s,
|
(Row1[2] + Row2[1]) * inv_s,
|
||||||
@ -632,7 +632,7 @@ namespace Godot
|
|||||||
{
|
{
|
||||||
real_t s = Mathf.Sqrt(-Row0[0] - Row1[1] + Row2[2] + 1.0f) * 2f;
|
real_t s = Mathf.Sqrt(-Row0[0] - Row1[1] + Row2[2] + 1.0f) * 2f;
|
||||||
real_t inv_s = 1f / s;
|
real_t inv_s = 1f / s;
|
||||||
return new Quat(
|
return new Quaternion(
|
||||||
(Row0[2] + Row2[0]) * inv_s,
|
(Row0[2] + Row2[0]) * inv_s,
|
||||||
(Row1[2] + Row2[1]) * inv_s,
|
(Row1[2] + Row2[1]) * inv_s,
|
||||||
s * 0.25f,
|
s * 0.25f,
|
||||||
@ -699,23 +699,23 @@ namespace Godot
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs a pure rotation basis matrix from the given quaternion.
|
/// Constructs a pure rotation basis matrix from the given quaternion.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="quat">The quaternion to create the basis from.</param>
|
/// <param name="quaternion">The quaternion to create the basis from.</param>
|
||||||
public Basis(Quat quat)
|
public Basis(Quaternion quaternion)
|
||||||
{
|
{
|
||||||
real_t s = 2.0f / quat.LengthSquared;
|
real_t s = 2.0f / quaternion.LengthSquared;
|
||||||
|
|
||||||
real_t xs = quat.x * s;
|
real_t xs = quaternion.x * s;
|
||||||
real_t ys = quat.y * s;
|
real_t ys = quaternion.y * s;
|
||||||
real_t zs = quat.z * s;
|
real_t zs = quaternion.z * s;
|
||||||
real_t wx = quat.w * xs;
|
real_t wx = quaternion.w * xs;
|
||||||
real_t wy = quat.w * ys;
|
real_t wy = quaternion.w * ys;
|
||||||
real_t wz = quat.w * zs;
|
real_t wz = quaternion.w * zs;
|
||||||
real_t xx = quat.x * xs;
|
real_t xx = quaternion.x * xs;
|
||||||
real_t xy = quat.x * ys;
|
real_t xy = quaternion.x * ys;
|
||||||
real_t xz = quat.x * zs;
|
real_t xz = quaternion.x * zs;
|
||||||
real_t yy = quat.y * ys;
|
real_t yy = quaternion.y * ys;
|
||||||
real_t yz = quat.y * zs;
|
real_t yz = quaternion.y * zs;
|
||||||
real_t zz = quat.z * zs;
|
real_t zz = quaternion.z * zs;
|
||||||
|
|
||||||
Row0 = new Vector3(1.0f - (yy + zz), xy - wz, xz + wy);
|
Row0 = new Vector3(1.0f - (yy + zz), xy - wz, xz + wy);
|
||||||
Row1 = new Vector3(xy + wz, 1.0f - (xx + zz), yz - wx);
|
Row1 = new Vector3(xy + wz, 1.0f - (xx + zz), yz - wx);
|
||||||
@ -727,8 +727,8 @@ namespace Godot
|
|||||||
/// (in the YXZ convention: when *composing*, first Y, then X, and Z last),
|
/// (in the YXZ convention: when *composing*, first Y, then X, and Z last),
|
||||||
/// given in the vector format as (X angle, Y angle, Z angle).
|
/// given in the vector format as (X angle, Y angle, Z angle).
|
||||||
///
|
///
|
||||||
/// Consider using the <see cref="Basis(Quat)"/> constructor instead, which
|
/// Consider using the <see cref="Basis(Quaternion)"/> constructor instead, which
|
||||||
/// uses a <see cref="Godot.Quat"/> quaternion instead of Euler angles.
|
/// uses a <see cref="Godot.Quaternion"/> quaternion instead of Euler angles.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="eulerYXZ">The Euler angles to create the basis from.</param>
|
/// <param name="eulerYXZ">The Euler angles to create the basis from.</param>
|
||||||
public Basis(Vector3 eulerYXZ)
|
public Basis(Vector3 eulerYXZ)
|
||||||
|
@ -15,7 +15,7 @@ namespace Godot
|
|||||||
/// It is similar to Basis, which implements matrix representation of
|
/// It is similar to Basis, which implements matrix representation of
|
||||||
/// rotations, and can be parametrized using both an axis-angle pair
|
/// rotations, and can be parametrized using both an axis-angle pair
|
||||||
/// or Euler angles. Basis stores rotation, scale, and shearing,
|
/// or Euler angles. Basis stores rotation, scale, and shearing,
|
||||||
/// while Quat only stores rotation.
|
/// while Quaternion only stores rotation.
|
||||||
///
|
///
|
||||||
/// Due to its compactness and the way it is stored in memory, certain
|
/// Due to its compactness and the way it is stored in memory, certain
|
||||||
/// operations (obtaining axis-angle and performing SLERP, in particular)
|
/// operations (obtaining axis-angle and performing SLERP, in particular)
|
||||||
@ -23,7 +23,7 @@ namespace Godot
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[Serializable]
|
[Serializable]
|
||||||
[StructLayout(LayoutKind.Sequential)]
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
public struct Quat : IEquatable<Quat>
|
public struct Quaternion : IEquatable<Quaternion>
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// X component of the quaternion (imaginary `i` axis part).
|
/// X component of the quaternion (imaginary `i` axis part).
|
||||||
@ -122,11 +122,11 @@ namespace Godot
|
|||||||
/// <param name="postB">A quaternion after `b`.</param>
|
/// <param name="postB">A quaternion after `b`.</param>
|
||||||
/// <param name="weight">A value on the range of 0.0 to 1.0, representing the amount of interpolation.</param>
|
/// <param name="weight">A value on the range of 0.0 to 1.0, representing the amount of interpolation.</param>
|
||||||
/// <returns>The interpolated quaternion.</returns>
|
/// <returns>The interpolated quaternion.</returns>
|
||||||
public Quat CubicSlerp(Quat b, Quat preA, Quat postB, real_t weight)
|
public Quaternion CubicSlerp(Quaternion b, Quaternion preA, Quaternion postB, real_t weight)
|
||||||
{
|
{
|
||||||
real_t t2 = (1.0f - weight) * weight * 2f;
|
real_t t2 = (1.0f - weight) * weight * 2f;
|
||||||
Quat sp = Slerp(b, weight);
|
Quaternion sp = Slerp(b, weight);
|
||||||
Quat sq = preA.Slerpni(postB, weight);
|
Quaternion sq = preA.Slerpni(postB, weight);
|
||||||
return sp.Slerpni(sq, t2);
|
return sp.Slerpni(sq, t2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,7 +135,7 @@ namespace Godot
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="b">The other quaternion.</param>
|
/// <param name="b">The other quaternion.</param>
|
||||||
/// <returns>The dot product.</returns>
|
/// <returns>The dot product.</returns>
|
||||||
public real_t Dot(Quat b)
|
public real_t Dot(Quaternion b)
|
||||||
{
|
{
|
||||||
return x * b.x + y * b.y + z * b.z + w * b.w;
|
return x * b.x + y * b.y + z * b.z + w * b.w;
|
||||||
}
|
}
|
||||||
@ -152,7 +152,7 @@ namespace Godot
|
|||||||
#if DEBUG
|
#if DEBUG
|
||||||
if (!IsNormalized())
|
if (!IsNormalized())
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Quat is not normalized");
|
throw new InvalidOperationException("Quaternion is not normalized");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
var basis = new Basis(this);
|
var basis = new Basis(this);
|
||||||
@ -163,15 +163,15 @@ namespace Godot
|
|||||||
/// Returns the inverse of the quaternion.
|
/// Returns the inverse of the quaternion.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>The inverse quaternion.</returns>
|
/// <returns>The inverse quaternion.</returns>
|
||||||
public Quat Inverse()
|
public Quaternion Inverse()
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
if (!IsNormalized())
|
if (!IsNormalized())
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Quat is not normalized");
|
throw new InvalidOperationException("Quaternion is not normalized");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return new Quat(-x, -y, -z, w);
|
return new Quaternion(-x, -y, -z, w);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -187,7 +187,7 @@ namespace Godot
|
|||||||
/// Returns a copy of the quaternion, normalized to unit length.
|
/// Returns a copy of the quaternion, normalized to unit length.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>The normalized quaternion.</returns>
|
/// <returns>The normalized quaternion.</returns>
|
||||||
public Quat Normalized()
|
public Quaternion Normalized()
|
||||||
{
|
{
|
||||||
return this / Length;
|
return this / Length;
|
||||||
}
|
}
|
||||||
@ -201,12 +201,12 @@ namespace Godot
|
|||||||
/// <param name="to">The destination quaternion for interpolation. Must be normalized.</param>
|
/// <param name="to">The destination quaternion for interpolation. Must be normalized.</param>
|
||||||
/// <param name="weight">A value on the range of 0.0 to 1.0, representing the amount of interpolation.</param>
|
/// <param name="weight">A value on the range of 0.0 to 1.0, representing the amount of interpolation.</param>
|
||||||
/// <returns>The resulting quaternion of the interpolation.</returns>
|
/// <returns>The resulting quaternion of the interpolation.</returns>
|
||||||
public Quat Slerp(Quat to, real_t weight)
|
public Quaternion Slerp(Quaternion to, real_t weight)
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
if (!IsNormalized())
|
if (!IsNormalized())
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Quat is not normalized");
|
throw new InvalidOperationException("Quaternion is not normalized");
|
||||||
}
|
}
|
||||||
if (!to.IsNormalized())
|
if (!to.IsNormalized())
|
||||||
{
|
{
|
||||||
@ -217,7 +217,7 @@ namespace Godot
|
|||||||
// Calculate cosine.
|
// Calculate cosine.
|
||||||
real_t cosom = x * to.x + y * to.y + z * to.z + w * to.w;
|
real_t cosom = x * to.x + y * to.y + z * to.z + w * to.w;
|
||||||
|
|
||||||
var to1 = new Quat();
|
var to1 = new Quaternion();
|
||||||
|
|
||||||
// Adjust signs if necessary.
|
// Adjust signs if necessary.
|
||||||
if (cosom < 0.0)
|
if (cosom < 0.0)
|
||||||
@ -255,7 +255,7 @@ namespace Godot
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Calculate final values.
|
// Calculate final values.
|
||||||
return new Quat
|
return new Quaternion
|
||||||
(
|
(
|
||||||
scale0 * x + scale1 * to1.x,
|
scale0 * x + scale1 * to1.x,
|
||||||
scale0 * y + scale1 * to1.y,
|
scale0 * y + scale1 * to1.y,
|
||||||
@ -272,7 +272,7 @@ namespace Godot
|
|||||||
/// <param name="to">The destination quaternion for interpolation. Must be normalized.</param>
|
/// <param name="to">The destination quaternion for interpolation. Must be normalized.</param>
|
||||||
/// <param name="weight">A value on the range of 0.0 to 1.0, representing the amount of interpolation.</param>
|
/// <param name="weight">A value on the range of 0.0 to 1.0, representing the amount of interpolation.</param>
|
||||||
/// <returns>The resulting quaternion of the interpolation.</returns>
|
/// <returns>The resulting quaternion of the interpolation.</returns>
|
||||||
public Quat Slerpni(Quat to, real_t weight)
|
public Quaternion Slerpni(Quaternion to, real_t weight)
|
||||||
{
|
{
|
||||||
real_t dot = Dot(to);
|
real_t dot = Dot(to);
|
||||||
|
|
||||||
@ -286,7 +286,7 @@ namespace Godot
|
|||||||
real_t newFactor = Mathf.Sin(weight * theta) * sinT;
|
real_t newFactor = Mathf.Sin(weight * theta) * sinT;
|
||||||
real_t invFactor = Mathf.Sin((1.0f - weight) * theta) * sinT;
|
real_t invFactor = Mathf.Sin((1.0f - weight) * theta) * sinT;
|
||||||
|
|
||||||
return new Quat
|
return new Quaternion
|
||||||
(
|
(
|
||||||
invFactor * x + newFactor * to.x,
|
invFactor * x + newFactor * to.x,
|
||||||
invFactor * y + newFactor * to.y,
|
invFactor * y + newFactor * to.y,
|
||||||
@ -305,7 +305,7 @@ namespace Godot
|
|||||||
#if DEBUG
|
#if DEBUG
|
||||||
if (!IsNormalized())
|
if (!IsNormalized())
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Quat is not normalized");
|
throw new InvalidOperationException("Quaternion is not normalized");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
var u = new Vector3(x, y, z);
|
var u = new Vector3(x, y, z);
|
||||||
@ -314,15 +314,15 @@ namespace Godot
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Constants
|
// Constants
|
||||||
private static readonly Quat _identity = new Quat(0, 0, 0, 1);
|
private static readonly Quaternion _identity = new Quaternion(0, 0, 0, 1);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The identity quaternion, representing no rotation.
|
/// The identity quaternion, representing no rotation.
|
||||||
/// Equivalent to an identity <see cref="Basis"/> matrix. If a vector is transformed by
|
/// Equivalent to an identity <see cref="Basis"/> matrix. If a vector is transformed by
|
||||||
/// an identity quaternion, it will not change.
|
/// an identity quaternion, it will not change.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>Equivalent to `new Quat(0, 0, 0, 1)`.</value>
|
/// <value>Equivalent to `new Quaternion(0, 0, 0, 1)`.</value>
|
||||||
public static Quat Identity { get { return _identity; } }
|
public static Quaternion Identity { get { return _identity; } }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs a quaternion defined by the given values.
|
/// Constructs a quaternion defined by the given values.
|
||||||
@ -331,7 +331,7 @@ namespace Godot
|
|||||||
/// <param name="y">Y component of the quaternion (imaginary `j` axis part).</param>
|
/// <param name="y">Y component of the quaternion (imaginary `j` axis part).</param>
|
||||||
/// <param name="z">Z component of the quaternion (imaginary `k` axis part).</param>
|
/// <param name="z">Z component of the quaternion (imaginary `k` axis part).</param>
|
||||||
/// <param name="w">W component of the quaternion (real part).</param>
|
/// <param name="w">W component of the quaternion (real part).</param>
|
||||||
public Quat(real_t x, real_t y, real_t z, real_t w)
|
public Quaternion(real_t x, real_t y, real_t z, real_t w)
|
||||||
{
|
{
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
@ -343,7 +343,7 @@ namespace Godot
|
|||||||
/// Constructs a quaternion from the given quaternion.
|
/// Constructs a quaternion from the given quaternion.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="q">The existing quaternion.</param>
|
/// <param name="q">The existing quaternion.</param>
|
||||||
public Quat(Quat q)
|
public Quaternion(Quaternion q)
|
||||||
{
|
{
|
||||||
this = q;
|
this = q;
|
||||||
}
|
}
|
||||||
@ -352,9 +352,9 @@ namespace Godot
|
|||||||
/// Constructs a quaternion from the given <see cref="Basis"/>.
|
/// Constructs a quaternion from the given <see cref="Basis"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="basis">The basis to construct from.</param>
|
/// <param name="basis">The basis to construct from.</param>
|
||||||
public Quat(Basis basis)
|
public Quaternion(Basis basis)
|
||||||
{
|
{
|
||||||
this = basis.Quat();
|
this = basis.Quaternion();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -364,7 +364,7 @@ namespace Godot
|
|||||||
/// given in the vector format as (X angle, Y angle, Z angle).
|
/// given in the vector format as (X angle, Y angle, Z angle).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="eulerYXZ"></param>
|
/// <param name="eulerYXZ"></param>
|
||||||
public Quat(Vector3 eulerYXZ)
|
public Quaternion(Vector3 eulerYXZ)
|
||||||
{
|
{
|
||||||
real_t half_a1 = eulerYXZ.y * 0.5f;
|
real_t half_a1 = eulerYXZ.y * 0.5f;
|
||||||
real_t half_a2 = eulerYXZ.x * 0.5f;
|
real_t half_a2 = eulerYXZ.x * 0.5f;
|
||||||
@ -393,7 +393,7 @@ namespace Godot
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="axis">The axis to rotate around. Must be normalized.</param>
|
/// <param name="axis">The axis to rotate around. Must be normalized.</param>
|
||||||
/// <param name="angle">The angle to rotate, in radians.</param>
|
/// <param name="angle">The angle to rotate, in radians.</param>
|
||||||
public Quat(Vector3 axis, real_t angle)
|
public Quaternion(Vector3 axis, real_t angle)
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
if (!axis.IsNormalized())
|
if (!axis.IsNormalized())
|
||||||
@ -424,9 +424,9 @@ namespace Godot
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Quat operator *(Quat left, Quat right)
|
public static Quaternion operator *(Quaternion left, Quaternion right)
|
||||||
{
|
{
|
||||||
return new Quat
|
return new Quaternion
|
||||||
(
|
(
|
||||||
left.w * right.x + left.x * right.w + left.y * right.z - left.z * right.y,
|
left.w * right.x + left.x * right.w + left.y * right.z - left.z * right.y,
|
||||||
left.w * right.y + left.y * right.w + left.z * right.x - left.x * right.z,
|
left.w * right.y + left.y * right.w + left.z * right.x - left.x * right.z,
|
||||||
@ -435,24 +435,24 @@ namespace Godot
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Quat operator +(Quat left, Quat right)
|
public static Quaternion operator +(Quaternion left, Quaternion right)
|
||||||
{
|
{
|
||||||
return new Quat(left.x + right.x, left.y + right.y, left.z + right.z, left.w + right.w);
|
return new Quaternion(left.x + right.x, left.y + right.y, left.z + right.z, left.w + right.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Quat operator -(Quat left, Quat right)
|
public static Quaternion operator -(Quaternion left, Quaternion right)
|
||||||
{
|
{
|
||||||
return new Quat(left.x - right.x, left.y - right.y, left.z - right.z, left.w - right.w);
|
return new Quaternion(left.x - right.x, left.y - right.y, left.z - right.z, left.w - right.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Quat operator -(Quat left)
|
public static Quaternion operator -(Quaternion left)
|
||||||
{
|
{
|
||||||
return new Quat(-left.x, -left.y, -left.z, -left.w);
|
return new Quaternion(-left.x, -left.y, -left.z, -left.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Quat operator *(Quat left, Vector3 right)
|
public static Quaternion operator *(Quaternion left, Vector3 right)
|
||||||
{
|
{
|
||||||
return new Quat
|
return new Quaternion
|
||||||
(
|
(
|
||||||
left.w * right.x + left.y * right.z - left.z * right.y,
|
left.w * right.x + left.y * right.z - left.z * right.y,
|
||||||
left.w * right.y + left.z * right.x - left.x * right.z,
|
left.w * right.y + left.z * right.x - left.x * right.z,
|
||||||
@ -461,9 +461,9 @@ namespace Godot
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Quat operator *(Vector3 left, Quat right)
|
public static Quaternion operator *(Vector3 left, Quaternion right)
|
||||||
{
|
{
|
||||||
return new Quat
|
return new Quaternion
|
||||||
(
|
(
|
||||||
right.w * left.x + right.y * left.z - right.z * left.y,
|
right.w * left.x + right.y * left.z - right.z * left.y,
|
||||||
right.w * left.y + right.z * left.x - right.x * left.z,
|
right.w * left.y + right.z * left.x - right.x * left.z,
|
||||||
@ -472,42 +472,42 @@ namespace Godot
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Quat operator *(Quat left, real_t right)
|
public static Quaternion operator *(Quaternion left, real_t right)
|
||||||
{
|
{
|
||||||
return new Quat(left.x * right, left.y * right, left.z * right, left.w * right);
|
return new Quaternion(left.x * right, left.y * right, left.z * right, left.w * right);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Quat operator *(real_t left, Quat right)
|
public static Quaternion operator *(real_t left, Quaternion right)
|
||||||
{
|
{
|
||||||
return new Quat(right.x * left, right.y * left, right.z * left, right.w * left);
|
return new Quaternion(right.x * left, right.y * left, right.z * left, right.w * left);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Quat operator /(Quat left, real_t right)
|
public static Quaternion operator /(Quaternion left, real_t right)
|
||||||
{
|
{
|
||||||
return left * (1.0f / right);
|
return left * (1.0f / right);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool operator ==(Quat left, Quat right)
|
public static bool operator ==(Quaternion left, Quaternion right)
|
||||||
{
|
{
|
||||||
return left.Equals(right);
|
return left.Equals(right);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool operator !=(Quat left, Quat right)
|
public static bool operator !=(Quaternion left, Quaternion right)
|
||||||
{
|
{
|
||||||
return !left.Equals(right);
|
return !left.Equals(right);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool Equals(object obj)
|
public override bool Equals(object obj)
|
||||||
{
|
{
|
||||||
if (obj is Quat)
|
if (obj is Quaternion)
|
||||||
{
|
{
|
||||||
return Equals((Quat)obj);
|
return Equals((Quaternion)obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Equals(Quat other)
|
public bool Equals(Quaternion other)
|
||||||
{
|
{
|
||||||
return x == other.x && y == other.y && z == other.z && w == other.w;
|
return x == other.x && y == other.y && z == other.z && w == other.w;
|
||||||
}
|
}
|
||||||
@ -518,7 +518,7 @@ namespace Godot
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="other">The other quaternion to compare.</param>
|
/// <param name="other">The other quaternion to compare.</param>
|
||||||
/// <returns>Whether or not the quaternions are approximately equal.</returns>
|
/// <returns>Whether or not the quaternions are approximately equal.</returns>
|
||||||
public bool IsEqualApprox(Quat other)
|
public bool IsEqualApprox(Quaternion other)
|
||||||
{
|
{
|
||||||
return Mathf.IsEqualApprox(x, other.x) && Mathf.IsEqualApprox(y, other.y) && Mathf.IsEqualApprox(z, other.z) && Mathf.IsEqualApprox(w, other.w);
|
return Mathf.IsEqualApprox(x, other.x) && Mathf.IsEqualApprox(y, other.y) && Mathf.IsEqualApprox(z, other.z) && Mathf.IsEqualApprox(w, other.w);
|
||||||
}
|
}
|
@ -124,15 +124,15 @@ namespace Godot
|
|||||||
/* not sure if very "efficient" but good enough? */
|
/* not sure if very "efficient" but good enough? */
|
||||||
|
|
||||||
Vector3 sourceScale = basis.Scale;
|
Vector3 sourceScale = basis.Scale;
|
||||||
Quat sourceRotation = basis.RotationQuat();
|
Quaternion sourceRotation = basis.RotationQuaternion();
|
||||||
Vector3 sourceLocation = origin;
|
Vector3 sourceLocation = origin;
|
||||||
|
|
||||||
Vector3 destinationScale = transform.basis.Scale;
|
Vector3 destinationScale = transform.basis.Scale;
|
||||||
Quat destinationRotation = transform.basis.RotationQuat();
|
Quaternion destinationRotation = transform.basis.RotationQuaternion();
|
||||||
Vector3 destinationLocation = transform.origin;
|
Vector3 destinationLocation = transform.origin;
|
||||||
|
|
||||||
var interpolated = new Transform3D();
|
var interpolated = new Transform3D();
|
||||||
interpolated.basis.SetQuatScale(sourceRotation.Slerp(destinationRotation, weight).Normalized(), sourceScale.Lerp(destinationScale, weight));
|
interpolated.basis.SetQuaternionScale(sourceRotation.Slerp(destinationRotation, weight).Normalized(), sourceScale.Lerp(destinationScale, weight));
|
||||||
interpolated.origin = sourceLocation.Lerp(destinationLocation, weight);
|
interpolated.origin = sourceLocation.Lerp(destinationLocation, weight);
|
||||||
|
|
||||||
return interpolated;
|
return interpolated;
|
||||||
@ -324,11 +324,11 @@ namespace Godot
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructs a transformation matrix from the given quaternion and origin vector.
|
/// Constructs a transformation matrix from the given quaternion and origin vector.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="quat">The <see cref="Godot.Quat"/> to create the basis from.</param>
|
/// <param name="quaternion">The <see cref="Godot.Quaternion"/> to create the basis from.</param>
|
||||||
/// <param name="origin">The origin vector, or column index 3.</param>
|
/// <param name="origin">The origin vector, or column index 3.</param>
|
||||||
public Transform3D(Quat quat, Vector3 origin)
|
public Transform3D(Quaternion quaternion, Vector3 origin)
|
||||||
{
|
{
|
||||||
basis = new Basis(quat);
|
basis = new Basis(quaternion);
|
||||||
this.origin = origin;
|
this.origin = origin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
<Compile Include="Core\NodePath.cs" />
|
<Compile Include="Core\NodePath.cs" />
|
||||||
<Compile Include="Core\Object.base.cs" />
|
<Compile Include="Core\Object.base.cs" />
|
||||||
<Compile Include="Core\Plane.cs" />
|
<Compile Include="Core\Plane.cs" />
|
||||||
<Compile Include="Core\Quat.cs" />
|
<Compile Include="Core\Quaternion.cs" />
|
||||||
<Compile Include="Core\Rect2.cs" />
|
<Compile Include="Core\Rect2.cs" />
|
||||||
<Compile Include="Core\Rect2i.cs" />
|
<Compile Include="Core\Rect2i.cs" />
|
||||||
<Compile Include="Core\RID.cs" />
|
<Compile Include="Core\RID.cs" />
|
||||||
|
@ -109,7 +109,7 @@ void CachedData::clear_godot_api_cache() {
|
|||||||
class_Vector3 = nullptr;
|
class_Vector3 = nullptr;
|
||||||
class_Vector3i = nullptr;
|
class_Vector3i = nullptr;
|
||||||
class_Basis = nullptr;
|
class_Basis = nullptr;
|
||||||
class_Quat = nullptr;
|
class_Quaternion = nullptr;
|
||||||
class_Transform3D = nullptr;
|
class_Transform3D = nullptr;
|
||||||
class_AABB = nullptr;
|
class_AABB = nullptr;
|
||||||
class_Color = nullptr;
|
class_Color = nullptr;
|
||||||
@ -238,7 +238,7 @@ void update_godot_api_cache() {
|
|||||||
CACHE_CLASS_AND_CHECK(Vector3, GODOT_API_CLASS(Vector3));
|
CACHE_CLASS_AND_CHECK(Vector3, GODOT_API_CLASS(Vector3));
|
||||||
CACHE_CLASS_AND_CHECK(Vector3i, GODOT_API_CLASS(Vector3i));
|
CACHE_CLASS_AND_CHECK(Vector3i, GODOT_API_CLASS(Vector3i));
|
||||||
CACHE_CLASS_AND_CHECK(Basis, GODOT_API_CLASS(Basis));
|
CACHE_CLASS_AND_CHECK(Basis, GODOT_API_CLASS(Basis));
|
||||||
CACHE_CLASS_AND_CHECK(Quat, GODOT_API_CLASS(Quat));
|
CACHE_CLASS_AND_CHECK(Quaternion, GODOT_API_CLASS(Quaternion));
|
||||||
CACHE_CLASS_AND_CHECK(Transform3D, GODOT_API_CLASS(Transform3D));
|
CACHE_CLASS_AND_CHECK(Transform3D, GODOT_API_CLASS(Transform3D));
|
||||||
CACHE_CLASS_AND_CHECK(AABB, GODOT_API_CLASS(AABB));
|
CACHE_CLASS_AND_CHECK(AABB, GODOT_API_CLASS(AABB));
|
||||||
CACHE_CLASS_AND_CHECK(Color, GODOT_API_CLASS(Color));
|
CACHE_CLASS_AND_CHECK(Color, GODOT_API_CLASS(Color));
|
||||||
|
@ -80,7 +80,7 @@ struct CachedData {
|
|||||||
GDMonoClass *class_Vector3;
|
GDMonoClass *class_Vector3;
|
||||||
GDMonoClass *class_Vector3i;
|
GDMonoClass *class_Vector3i;
|
||||||
GDMonoClass *class_Basis;
|
GDMonoClass *class_Basis;
|
||||||
GDMonoClass *class_Quat;
|
GDMonoClass *class_Quaternion;
|
||||||
GDMonoClass *class_Transform3D;
|
GDMonoClass *class_Transform3D;
|
||||||
GDMonoClass *class_AABB;
|
GDMonoClass *class_AABB;
|
||||||
GDMonoClass *class_Color;
|
GDMonoClass *class_Color;
|
||||||
|
@ -146,8 +146,8 @@ void GDMonoField::set_value_from_variant(MonoObject *p_object, const Variant &p_
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tclass == CACHED_CLASS(Quat)) {
|
if (tclass == CACHED_CLASS(Quaternion)) {
|
||||||
GDMonoMarshal::M_Quat from = MARSHALLED_OUT(Quat, p_value.operator ::Quat());
|
GDMonoMarshal::M_Quaternion from = MARSHALLED_OUT(Quaternion, p_value.operator ::Quaternion());
|
||||||
mono_field_set_value(p_object, mono_field, &from);
|
mono_field_set_value(p_object, mono_field, &from);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -336,8 +336,8 @@ void GDMonoField::set_value_from_variant(MonoObject *p_object, const Variant &p_
|
|||||||
GDMonoMarshal::M_Plane from = MARSHALLED_OUT(Plane, p_value.operator ::Plane());
|
GDMonoMarshal::M_Plane from = MARSHALLED_OUT(Plane, p_value.operator ::Plane());
|
||||||
mono_field_set_value(p_object, mono_field, &from);
|
mono_field_set_value(p_object, mono_field, &from);
|
||||||
} break;
|
} break;
|
||||||
case Variant::QUAT: {
|
case Variant::QUATERNION: {
|
||||||
GDMonoMarshal::M_Quat from = MARSHALLED_OUT(Quat, p_value.operator ::Quat());
|
GDMonoMarshal::M_Quaternion from = MARSHALLED_OUT(Quaternion, p_value.operator ::Quaternion());
|
||||||
mono_field_set_value(p_object, mono_field, &from);
|
mono_field_set_value(p_object, mono_field, &from);
|
||||||
} break;
|
} break;
|
||||||
case Variant::AABB: {
|
case Variant::AABB: {
|
||||||
|
@ -104,8 +104,8 @@ Variant::Type managed_to_variant_type(const ManagedType &p_type, bool *r_nil_is_
|
|||||||
return Variant::BASIS;
|
return Variant::BASIS;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vtclass == CACHED_CLASS(Quat)) {
|
if (vtclass == CACHED_CLASS(Quaternion)) {
|
||||||
return Variant::QUAT;
|
return Variant::QUATERNION;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vtclass == CACHED_CLASS(Transform3D)) {
|
if (vtclass == CACHED_CLASS(Transform3D)) {
|
||||||
@ -508,9 +508,9 @@ MonoObject *variant_to_mono_object(const Variant &p_var) {
|
|||||||
GDMonoMarshal::M_Plane from = MARSHALLED_OUT(Plane, p_var.operator ::Plane());
|
GDMonoMarshal::M_Plane from = MARSHALLED_OUT(Plane, p_var.operator ::Plane());
|
||||||
return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Plane), &from);
|
return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Plane), &from);
|
||||||
}
|
}
|
||||||
case Variant::QUAT: {
|
case Variant::QUATERNION: {
|
||||||
GDMonoMarshal::M_Quat from = MARSHALLED_OUT(Quat, p_var.operator ::Quat());
|
GDMonoMarshal::M_Quaternion from = MARSHALLED_OUT(Quaternion, p_var.operator ::Quaternion());
|
||||||
return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Quat), &from);
|
return mono_value_box(mono_domain_get(), CACHED_CLASS_RAW(Quaternion), &from);
|
||||||
}
|
}
|
||||||
case Variant::AABB: {
|
case Variant::AABB: {
|
||||||
GDMonoMarshal::M_AABB from = MARSHALLED_OUT(AABB, p_var.operator ::AABB());
|
GDMonoMarshal::M_AABB from = MARSHALLED_OUT(AABB, p_var.operator ::AABB());
|
||||||
@ -619,7 +619,7 @@ size_t variant_get_managed_unboxed_size(const ManagedType &p_type) {
|
|||||||
RETURN_CHECK_FOR_STRUCT(Vector3);
|
RETURN_CHECK_FOR_STRUCT(Vector3);
|
||||||
RETURN_CHECK_FOR_STRUCT(Vector3i);
|
RETURN_CHECK_FOR_STRUCT(Vector3i);
|
||||||
RETURN_CHECK_FOR_STRUCT(Basis);
|
RETURN_CHECK_FOR_STRUCT(Basis);
|
||||||
RETURN_CHECK_FOR_STRUCT(Quat);
|
RETURN_CHECK_FOR_STRUCT(Quaternion);
|
||||||
RETURN_CHECK_FOR_STRUCT(Transform3D);
|
RETURN_CHECK_FOR_STRUCT(Transform3D);
|
||||||
RETURN_CHECK_FOR_STRUCT(AABB);
|
RETURN_CHECK_FOR_STRUCT(AABB);
|
||||||
RETURN_CHECK_FOR_STRUCT(Color);
|
RETURN_CHECK_FOR_STRUCT(Color);
|
||||||
@ -724,7 +724,7 @@ void *variant_to_managed_unboxed(const Variant &p_var, const ManagedType &p_type
|
|||||||
RETURN_CHECK_FOR_STRUCT(Vector3);
|
RETURN_CHECK_FOR_STRUCT(Vector3);
|
||||||
RETURN_CHECK_FOR_STRUCT(Vector3i);
|
RETURN_CHECK_FOR_STRUCT(Vector3i);
|
||||||
RETURN_CHECK_FOR_STRUCT(Basis);
|
RETURN_CHECK_FOR_STRUCT(Basis);
|
||||||
RETURN_CHECK_FOR_STRUCT(Quat);
|
RETURN_CHECK_FOR_STRUCT(Quaternion);
|
||||||
RETURN_CHECK_FOR_STRUCT(Transform3D);
|
RETURN_CHECK_FOR_STRUCT(Transform3D);
|
||||||
RETURN_CHECK_FOR_STRUCT(AABB);
|
RETURN_CHECK_FOR_STRUCT(AABB);
|
||||||
RETURN_CHECK_FOR_STRUCT(Color);
|
RETURN_CHECK_FOR_STRUCT(Color);
|
||||||
@ -880,7 +880,7 @@ MonoObject *variant_to_mono_object(const Variant &p_var, const ManagedType &p_ty
|
|||||||
RETURN_CHECK_FOR_STRUCT(Vector3);
|
RETURN_CHECK_FOR_STRUCT(Vector3);
|
||||||
RETURN_CHECK_FOR_STRUCT(Vector3i);
|
RETURN_CHECK_FOR_STRUCT(Vector3i);
|
||||||
RETURN_CHECK_FOR_STRUCT(Basis);
|
RETURN_CHECK_FOR_STRUCT(Basis);
|
||||||
RETURN_CHECK_FOR_STRUCT(Quat);
|
RETURN_CHECK_FOR_STRUCT(Quaternion);
|
||||||
RETURN_CHECK_FOR_STRUCT(Transform3D);
|
RETURN_CHECK_FOR_STRUCT(Transform3D);
|
||||||
RETURN_CHECK_FOR_STRUCT(AABB);
|
RETURN_CHECK_FOR_STRUCT(AABB);
|
||||||
RETURN_CHECK_FOR_STRUCT(Color);
|
RETURN_CHECK_FOR_STRUCT(Color);
|
||||||
@ -1036,8 +1036,8 @@ Variant mono_object_to_variant_impl(MonoObject *p_obj, const ManagedType &p_type
|
|||||||
return MARSHALLED_IN(Basis, unbox_addr<GDMonoMarshal::M_Basis>(p_obj));
|
return MARSHALLED_IN(Basis, unbox_addr<GDMonoMarshal::M_Basis>(p_obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vtclass == CACHED_CLASS(Quat)) {
|
if (vtclass == CACHED_CLASS(Quaternion)) {
|
||||||
return MARSHALLED_IN(Quat, unbox_addr<GDMonoMarshal::M_Quat>(p_obj));
|
return MARSHALLED_IN(Quaternion, unbox_addr<GDMonoMarshal::M_Quaternion>(p_obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vtclass == CACHED_CLASS(Transform3D)) {
|
if (vtclass == CACHED_CLASS(Transform3D)) {
|
||||||
|
@ -263,11 +263,11 @@ enum {
|
|||||||
|
|
||||||
MATCHES_Basis = (MATCHES_Vector3 && (sizeof(Basis) == (sizeof(Vector3) * 3))), // No field offset required, it stores an array
|
MATCHES_Basis = (MATCHES_Vector3 && (sizeof(Basis) == (sizeof(Vector3) * 3))), // No field offset required, it stores an array
|
||||||
|
|
||||||
MATCHES_Quat = (MATCHES_real_t && (sizeof(Quat) == (sizeof(real_t) * 4)) &&
|
MATCHES_Quaternion = (MATCHES_real_t && (sizeof(Quaternion) == (sizeof(real_t) * 4)) &&
|
||||||
offsetof(Quat, x) == (sizeof(real_t) * 0) &&
|
offsetof(Quaternion, x) == (sizeof(real_t) * 0) &&
|
||||||
offsetof(Quat, y) == (sizeof(real_t) * 1) &&
|
offsetof(Quaternion, y) == (sizeof(real_t) * 1) &&
|
||||||
offsetof(Quat, z) == (sizeof(real_t) * 2) &&
|
offsetof(Quaternion, z) == (sizeof(real_t) * 2) &&
|
||||||
offsetof(Quat, w) == (sizeof(real_t) * 3)),
|
offsetof(Quaternion, w) == (sizeof(real_t) * 3)),
|
||||||
|
|
||||||
MATCHES_Transform3D = (MATCHES_Basis && MATCHES_Vector3 && (sizeof(Transform3D) == (sizeof(Basis) + sizeof(Vector3))) &&
|
MATCHES_Transform3D = (MATCHES_Basis && MATCHES_Vector3 && (sizeof(Transform3D) == (sizeof(Basis) + sizeof(Vector3))) &&
|
||||||
offsetof(Transform3D, basis) == 0 &&
|
offsetof(Transform3D, basis) == 0 &&
|
||||||
@ -292,7 +292,7 @@ enum {
|
|||||||
#ifdef GD_MONO_FORCE_INTEROP_STRUCT_COPY
|
#ifdef GD_MONO_FORCE_INTEROP_STRUCT_COPY
|
||||||
/* clang-format off */
|
/* clang-format off */
|
||||||
static_assert(MATCHES_Vector2 && MATCHES_Rect2 && MATCHES_Transform2D && MATCHES_Vector3 &&
|
static_assert(MATCHES_Vector2 && MATCHES_Rect2 && MATCHES_Transform2D && MATCHES_Vector3 &&
|
||||||
MATCHES_Basis && MATCHES_Quat && MATCHES_Transform3D && MATCHES_AABB && MATCHES_Color &&
|
MATCHES_Basis && MATCHES_Quaternion && MATCHES_Transform3D && MATCHES_AABB && MATCHES_Color &&
|
||||||
MATCHES_Plane && MATCHES_Vector2i && MATCHES_Rect2i && MATCHES_Vector3i);
|
MATCHES_Plane && MATCHES_Vector2i && MATCHES_Rect2i && MATCHES_Vector3i);
|
||||||
/* clang-format on */
|
/* clang-format on */
|
||||||
#endif
|
#endif
|
||||||
@ -420,15 +420,15 @@ struct M_Basis {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct M_Quat {
|
struct M_Quaternion {
|
||||||
real_t x, y, z, w;
|
real_t x, y, z, w;
|
||||||
|
|
||||||
static _FORCE_INLINE_ Quat convert_to(const M_Quat &p_from) {
|
static _FORCE_INLINE_ Quaternion convert_to(const M_Quaternion &p_from) {
|
||||||
return Quat(p_from.x, p_from.y, p_from.z, p_from.w);
|
return Quaternion(p_from.x, p_from.y, p_from.z, p_from.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
static _FORCE_INLINE_ M_Quat convert_from(const Quat &p_from) {
|
static _FORCE_INLINE_ M_Quaternion convert_from(const Quaternion &p_from) {
|
||||||
M_Quat ret = { p_from.x, p_from.y, p_from.z, p_from.w };
|
M_Quaternion ret = { p_from.x, p_from.y, p_from.z, p_from.w };
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -533,7 +533,7 @@ DECL_TYPE_MARSHAL_TEMPLATES(Transform2D)
|
|||||||
DECL_TYPE_MARSHAL_TEMPLATES(Vector3)
|
DECL_TYPE_MARSHAL_TEMPLATES(Vector3)
|
||||||
DECL_TYPE_MARSHAL_TEMPLATES(Vector3i)
|
DECL_TYPE_MARSHAL_TEMPLATES(Vector3i)
|
||||||
DECL_TYPE_MARSHAL_TEMPLATES(Basis)
|
DECL_TYPE_MARSHAL_TEMPLATES(Basis)
|
||||||
DECL_TYPE_MARSHAL_TEMPLATES(Quat)
|
DECL_TYPE_MARSHAL_TEMPLATES(Quaternion)
|
||||||
DECL_TYPE_MARSHAL_TEMPLATES(Transform3D)
|
DECL_TYPE_MARSHAL_TEMPLATES(Transform3D)
|
||||||
DECL_TYPE_MARSHAL_TEMPLATES(AABB)
|
DECL_TYPE_MARSHAL_TEMPLATES(AABB)
|
||||||
DECL_TYPE_MARSHAL_TEMPLATES(Color)
|
DECL_TYPE_MARSHAL_TEMPLATES(Color)
|
||||||
|
@ -381,7 +381,7 @@ static Color _color_from_type(Variant::Type p_type, bool dark_theme = true) {
|
|||||||
case Variant::PLANE:
|
case Variant::PLANE:
|
||||||
color = Color(0.97, 0.44, 0.44);
|
color = Color(0.97, 0.44, 0.44);
|
||||||
break;
|
break;
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
color = Color(0.93, 0.41, 0.64);
|
color = Color(0.93, 0.41, 0.64);
|
||||||
break;
|
break;
|
||||||
case Variant::AABB:
|
case Variant::AABB:
|
||||||
@ -487,7 +487,7 @@ static Color _color_from_type(Variant::Type p_type, bool dark_theme = true) {
|
|||||||
case Variant::PLANE:
|
case Variant::PLANE:
|
||||||
color = Color(0.97, 0.44, 0.44);
|
color = Color(0.97, 0.44, 0.44);
|
||||||
break;
|
break;
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
color = Color(0.93, 0.41, 0.64);
|
color = Color(0.93, 0.41, 0.64);
|
||||||
break;
|
break;
|
||||||
case Variant::AABB:
|
case Variant::AABB:
|
||||||
|
@ -3918,7 +3918,7 @@ void register_visual_script_nodes() {
|
|||||||
VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::RECT2I), create_node_deconst_typed<Variant::Type::RECT2I>);
|
VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::RECT2I), create_node_deconst_typed<Variant::Type::RECT2I>);
|
||||||
VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::TRANSFORM2D), create_node_deconst_typed<Variant::Type::TRANSFORM2D>);
|
VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::TRANSFORM2D), create_node_deconst_typed<Variant::Type::TRANSFORM2D>);
|
||||||
VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::PLANE), create_node_deconst_typed<Variant::Type::PLANE>);
|
VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::PLANE), create_node_deconst_typed<Variant::Type::PLANE>);
|
||||||
VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::QUAT), create_node_deconst_typed<Variant::Type::QUAT>);
|
VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::QUATERNION), create_node_deconst_typed<Variant::Type::QUATERNION>);
|
||||||
VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::AABB), create_node_deconst_typed<Variant::Type::AABB>);
|
VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::AABB), create_node_deconst_typed<Variant::Type::AABB>);
|
||||||
VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::BASIS), create_node_deconst_typed<Variant::Type::BASIS>);
|
VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::BASIS), create_node_deconst_typed<Variant::Type::BASIS>);
|
||||||
VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::TRANSFORM3D), create_node_deconst_typed<Variant::Type::TRANSFORM3D>);
|
VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::TRANSFORM3D), create_node_deconst_typed<Variant::Type::TRANSFORM3D>);
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
<DisplayString Condition="type == Variant::RECT2">{*(Rect2 *)_data._mem}</DisplayString>
|
<DisplayString Condition="type == Variant::RECT2">{*(Rect2 *)_data._mem}</DisplayString>
|
||||||
<DisplayString Condition="type == Variant::VECTOR3">{*(Vector3 *)_data._mem}</DisplayString>
|
<DisplayString Condition="type == Variant::VECTOR3">{*(Vector3 *)_data._mem}</DisplayString>
|
||||||
<DisplayString Condition="type == Variant::PLANE">{*(Plane *)_data._mem}</DisplayString>
|
<DisplayString Condition="type == Variant::PLANE">{*(Plane *)_data._mem}</DisplayString>
|
||||||
<DisplayString Condition="type == Variant::QUAT">{*(Quat *)_data._mem}</DisplayString>
|
<DisplayString Condition="type == Variant::QUATERNION">{*(Quaternion *)_data._mem}</DisplayString>
|
||||||
<DisplayString Condition="type == Variant::COLOR">{*(Color *)_data._mem}</DisplayString>
|
<DisplayString Condition="type == Variant::COLOR">{*(Color *)_data._mem}</DisplayString>
|
||||||
<DisplayString Condition="type == Variant::NODE_PATH">{*(NodePath *)_data._mem}</DisplayString>
|
<DisplayString Condition="type == Variant::NODE_PATH">{*(NodePath *)_data._mem}</DisplayString>
|
||||||
<DisplayString Condition="type == Variant::RID">{*(::RID *)_data._mem}</DisplayString>
|
<DisplayString Condition="type == Variant::RID">{*(::RID *)_data._mem}</DisplayString>
|
||||||
@ -78,7 +78,7 @@
|
|||||||
<Item Name="[value]" Condition="type == Variant::RECT2">*(Rect2 *)_data._mem</Item>
|
<Item Name="[value]" Condition="type == Variant::RECT2">*(Rect2 *)_data._mem</Item>
|
||||||
<Item Name="[value]" Condition="type == Variant::VECTOR3">*(Vector3 *)_data._mem</Item>
|
<Item Name="[value]" Condition="type == Variant::VECTOR3">*(Vector3 *)_data._mem</Item>
|
||||||
<Item Name="[value]" Condition="type == Variant::PLANE">*(Plane *)_data._mem</Item>
|
<Item Name="[value]" Condition="type == Variant::PLANE">*(Plane *)_data._mem</Item>
|
||||||
<Item Name="[value]" Condition="type == Variant::QUAT">*(Quat *)_data._mem</Item>
|
<Item Name="[value]" Condition="type == Variant::QUATERNION">*(Quaternion *)_data._mem</Item>
|
||||||
<Item Name="[value]" Condition="type == Variant::COLOR">*(Color *)_data._mem</Item>
|
<Item Name="[value]" Condition="type == Variant::COLOR">*(Color *)_data._mem</Item>
|
||||||
<Item Name="[value]" Condition="type == Variant::NODE_PATH">*(NodePath *)_data._mem</Item>
|
<Item Name="[value]" Condition="type == Variant::NODE_PATH">*(NodePath *)_data._mem</Item>
|
||||||
<Item Name="[value]" Condition="type == Variant::RID">*(::RID *)_data._mem</Item>
|
<Item Name="[value]" Condition="type == Variant::RID">*(::RID *)_data._mem</Item>
|
||||||
@ -128,8 +128,8 @@
|
|||||||
</Expand>
|
</Expand>
|
||||||
</Type>
|
</Type>
|
||||||
|
|
||||||
<Type Name="Quat">
|
<Type Name="Quaternion">
|
||||||
<DisplayString>Quat {{{x},{y},{z},{w}}}</DisplayString>
|
<DisplayString>Quaternion {{{x},{y},{z},{w}}}</DisplayString>
|
||||||
<Expand>
|
<Expand>
|
||||||
<Item Name="x">x</Item>
|
<Item Name="x">x</Item>
|
||||||
<Item Name="y">y</Item>
|
<Item Name="y">y</Item>
|
||||||
|
@ -236,7 +236,7 @@ void AnimationCache::set_all(float p_time, float p_delta) {
|
|||||||
switch (animation->track_get_type(i)) {
|
switch (animation->track_get_type(i)) {
|
||||||
case Animation::TYPE_TRANSFORM3D: {
|
case Animation::TYPE_TRANSFORM3D: {
|
||||||
Vector3 loc, scale;
|
Vector3 loc, scale;
|
||||||
Quat rot;
|
Quaternion rot;
|
||||||
animation->transform_track_interpolate(i, p_time, &loc, &rot, &scale);
|
animation->transform_track_interpolate(i, p_time, &loc, &rot, &scale);
|
||||||
Transform3D tr(Basis(rot), loc);
|
Transform3D tr(Basis(rot), loc);
|
||||||
tr.basis.scale(scale);
|
tr.basis.scale(scale);
|
||||||
|
@ -377,7 +377,7 @@ void AnimationPlayer::_animation_process_animation(AnimationData *p_anim, float
|
|||||||
}
|
}
|
||||||
|
|
||||||
Vector3 loc;
|
Vector3 loc;
|
||||||
Quat rot;
|
Quaternion rot;
|
||||||
Vector3 scale;
|
Vector3 scale;
|
||||||
|
|
||||||
Error err = a->transform_track_interpolate(i, p_time, &loc, &rot, &scale);
|
Error err = a->transform_track_interpolate(i, p_time, &loc, &rot, &scale);
|
||||||
@ -850,7 +850,7 @@ void AnimationPlayer::_animation_update_transforms() {
|
|||||||
ERR_CONTINUE(nc->accum_pass != accum_pass);
|
ERR_CONTINUE(nc->accum_pass != accum_pass);
|
||||||
|
|
||||||
t.origin = nc->loc_accum;
|
t.origin = nc->loc_accum;
|
||||||
t.basis.set_quat_scale(nc->rot_accum, nc->scale_accum);
|
t.basis.set_quaternion_scale(nc->rot_accum, nc->scale_accum);
|
||||||
#ifndef _3D_DISABLED
|
#ifndef _3D_DISABLED
|
||||||
if (nc->skeleton && nc->bone_idx >= 0) {
|
if (nc->skeleton && nc->bone_idx >= 0) {
|
||||||
nc->skeleton->set_bone_pose(nc->bone_idx, t);
|
nc->skeleton->set_bone_pose(nc->bone_idx, t);
|
||||||
|
@ -102,7 +102,7 @@ private:
|
|||||||
// accumulated transforms
|
// accumulated transforms
|
||||||
|
|
||||||
Vector3 loc_accum;
|
Vector3 loc_accum;
|
||||||
Quat rot_accum;
|
Quaternion rot_accum;
|
||||||
Vector3 scale_accum;
|
Vector3 scale_accum;
|
||||||
uint64_t accum_pass = 0;
|
uint64_t accum_pass = 0;
|
||||||
|
|
||||||
|
@ -853,7 +853,7 @@ void AnimationTree::_process_graph(float p_delta) {
|
|||||||
if (t->process_pass != process_pass) {
|
if (t->process_pass != process_pass) {
|
||||||
t->process_pass = process_pass;
|
t->process_pass = process_pass;
|
||||||
t->loc = Vector3();
|
t->loc = Vector3();
|
||||||
t->rot = Quat();
|
t->rot = Quaternion();
|
||||||
t->rot_blend_accum = 0;
|
t->rot_blend_accum = 0;
|
||||||
t->scale = Vector3(1, 1, 1);
|
t->scale = Vector3(1, 1, 1);
|
||||||
}
|
}
|
||||||
@ -868,7 +868,7 @@ void AnimationTree::_process_graph(float p_delta) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Vector3 loc[2];
|
Vector3 loc[2];
|
||||||
Quat rot[2];
|
Quaternion rot[2];
|
||||||
Vector3 scale[2];
|
Vector3 scale[2];
|
||||||
|
|
||||||
if (prev_time > time) {
|
if (prev_time > time) {
|
||||||
@ -881,7 +881,7 @@ void AnimationTree::_process_graph(float p_delta) {
|
|||||||
|
|
||||||
t->loc += (loc[1] - loc[0]) * blend;
|
t->loc += (loc[1] - loc[0]) * blend;
|
||||||
t->scale += (scale[1] - scale[0]) * blend;
|
t->scale += (scale[1] - scale[0]) * blend;
|
||||||
Quat q = Quat().slerp(rot[0].normalized().inverse() * rot[1].normalized(), blend).normalized();
|
Quaternion q = Quaternion().slerp(rot[0].normalized().inverse() * rot[1].normalized(), blend).normalized();
|
||||||
t->rot = (t->rot * q).normalized();
|
t->rot = (t->rot * q).normalized();
|
||||||
|
|
||||||
prev_time = 0;
|
prev_time = 0;
|
||||||
@ -896,14 +896,14 @@ void AnimationTree::_process_graph(float p_delta) {
|
|||||||
|
|
||||||
t->loc += (loc[1] - loc[0]) * blend;
|
t->loc += (loc[1] - loc[0]) * blend;
|
||||||
t->scale += (scale[1] - scale[0]) * blend;
|
t->scale += (scale[1] - scale[0]) * blend;
|
||||||
Quat q = Quat().slerp(rot[0].normalized().inverse() * rot[1].normalized(), blend).normalized();
|
Quaternion q = Quaternion().slerp(rot[0].normalized().inverse() * rot[1].normalized(), blend).normalized();
|
||||||
t->rot = (t->rot * q).normalized();
|
t->rot = (t->rot * q).normalized();
|
||||||
|
|
||||||
prev_time = 0;
|
prev_time = 0;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Vector3 loc;
|
Vector3 loc;
|
||||||
Quat rot;
|
Quaternion rot;
|
||||||
Vector3 scale;
|
Vector3 scale;
|
||||||
|
|
||||||
Error err = a->transform_track_interpolate(i, time, &loc, &rot, &scale);
|
Error err = a->transform_track_interpolate(i, time, &loc, &rot, &scale);
|
||||||
@ -1197,7 +1197,7 @@ void AnimationTree::_process_graph(float p_delta) {
|
|||||||
Transform3D xform;
|
Transform3D xform;
|
||||||
xform.origin = t->loc;
|
xform.origin = t->loc;
|
||||||
|
|
||||||
xform.basis.set_quat_scale(t->rot, t->scale);
|
xform.basis.set_quaternion_scale(t->rot, t->scale);
|
||||||
|
|
||||||
if (t->root_motion) {
|
if (t->root_motion) {
|
||||||
root_motion_transform = xform;
|
root_motion_transform = xform;
|
||||||
|
@ -190,7 +190,7 @@ private:
|
|||||||
#endif // _3D_DISABLED
|
#endif // _3D_DISABLED
|
||||||
int bone_idx = -1;
|
int bone_idx = -1;
|
||||||
Vector3 loc;
|
Vector3 loc;
|
||||||
Quat rot;
|
Quaternion rot;
|
||||||
float rot_blend_accum = 0.0;
|
float rot_blend_accum = 0.0;
|
||||||
Vector3 scale;
|
Vector3 scale;
|
||||||
|
|
||||||
|
@ -519,11 +519,11 @@ Variant Tween::_run_equation(InterpolateData &p_data) {
|
|||||||
result = r;
|
result = r;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case Variant::QUAT: {
|
case Variant::QUATERNION: {
|
||||||
// Get the quaternian for the initial and delta values
|
// Get the quaternian for the initial and delta values
|
||||||
Quat i = initial_val;
|
Quaternion i = initial_val;
|
||||||
Quat d = delta_val;
|
Quaternion d = delta_val;
|
||||||
Quat r;
|
Quaternion r;
|
||||||
|
|
||||||
// Execute the equation on the quaternian values and mutate the r quaternian
|
// Execute the equation on the quaternian values and mutate the r quaternian
|
||||||
// This uses the custom APPLY_EQUATION macro defined above
|
// This uses the custom APPLY_EQUATION macro defined above
|
||||||
@ -1202,9 +1202,9 @@ bool Tween::_calc_delta_val(const Variant &p_initial_val, const Variant &p_final
|
|||||||
delta_val = d;
|
delta_val = d;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
// Convert to quaternianls and find the delta
|
// Convert to quaternianls and find the delta
|
||||||
delta_val = final_val.operator Quat() - initial_val.operator Quat();
|
delta_val = final_val.operator Quaternion() - initial_val.operator Quaternion();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Variant::AABB: {
|
case Variant::AABB: {
|
||||||
@ -1266,7 +1266,7 @@ bool Tween::_calc_delta_val(const Variant &p_initial_val, const Variant &p_final
|
|||||||
Variant::RECT2,
|
Variant::RECT2,
|
||||||
Variant::VECTOR3,
|
Variant::VECTOR3,
|
||||||
Variant::TRANSFORM2D,
|
Variant::TRANSFORM2D,
|
||||||
Variant::QUAT,
|
Variant::QUATERNION,
|
||||||
Variant::AABB,
|
Variant::AABB,
|
||||||
Variant::BASIS,
|
Variant::BASIS,
|
||||||
Variant::TRANSFORM3D,
|
Variant::TRANSFORM3D,
|
||||||
|
@ -361,7 +361,7 @@ bool Animation::_get(const StringName &p_name, Variant &r_ret) const {
|
|||||||
int idx = 0;
|
int idx = 0;
|
||||||
for (int i = 0; i < track_get_key_count(track); i++) {
|
for (int i = 0; i < track_get_key_count(track); i++) {
|
||||||
Vector3 loc;
|
Vector3 loc;
|
||||||
Quat rot;
|
Quaternion rot;
|
||||||
Vector3 scale;
|
Vector3 scale;
|
||||||
transform_track_get_key(track, i, &loc, &rot, &scale);
|
transform_track_get_key(track, i, &loc, &rot, &scale);
|
||||||
|
|
||||||
@ -773,7 +773,7 @@ void Animation::_clear(T &p_keys) {
|
|||||||
p_keys.clear();
|
p_keys.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
Error Animation::transform_track_get_key(int p_track, int p_key, Vector3 *r_loc, Quat *r_rot, Vector3 *r_scale) const {
|
Error Animation::transform_track_get_key(int p_track, int p_key, Vector3 *r_loc, Quaternion *r_rot, Vector3 *r_scale) const {
|
||||||
ERR_FAIL_INDEX_V(p_track, tracks.size(), ERR_INVALID_PARAMETER);
|
ERR_FAIL_INDEX_V(p_track, tracks.size(), ERR_INVALID_PARAMETER);
|
||||||
Track *t = tracks[p_track];
|
Track *t = tracks[p_track];
|
||||||
|
|
||||||
@ -794,7 +794,7 @@ Error Animation::transform_track_get_key(int p_track, int p_key, Vector3 *r_loc,
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Animation::transform_track_insert_key(int p_track, float p_time, const Vector3 &p_loc, const Quat &p_rot, const Vector3 &p_scale) {
|
int Animation::transform_track_insert_key(int p_track, float p_time, const Vector3 &p_loc, const Quaternion &p_rot, const Vector3 &p_scale) {
|
||||||
ERR_FAIL_INDEX_V(p_track, tracks.size(), -1);
|
ERR_FAIL_INDEX_V(p_track, tracks.size(), -1);
|
||||||
Track *t = tracks[p_track];
|
Track *t = tracks[p_track];
|
||||||
ERR_FAIL_COND_V(t->type != TYPE_TRANSFORM3D, -1);
|
ERR_FAIL_COND_V(t->type != TYPE_TRANSFORM3D, -1);
|
||||||
@ -958,7 +958,7 @@ void Animation::track_insert_key(int p_track, float p_time, const Variant &p_key
|
|||||||
loc = d["location"];
|
loc = d["location"];
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat rot;
|
Quaternion rot;
|
||||||
if (d.has("rotation")) {
|
if (d.has("rotation")) {
|
||||||
rot = d["rotation"];
|
rot = d["rotation"];
|
||||||
}
|
}
|
||||||
@ -1462,7 +1462,7 @@ Vector3 Animation::_interpolate(const Vector3 &p_a, const Vector3 &p_b, float p_
|
|||||||
return p_a.lerp(p_b, p_c);
|
return p_a.lerp(p_b, p_c);
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat Animation::_interpolate(const Quat &p_a, const Quat &p_b, float p_c) const {
|
Quaternion Animation::_interpolate(const Quaternion &p_a, const Quaternion &p_b, float p_c) const {
|
||||||
return p_a.slerp(p_b, p_c);
|
return p_a.slerp(p_b, p_c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1490,7 +1490,7 @@ Vector3 Animation::_cubic_interpolate(const Vector3 &p_pre_a, const Vector3 &p_a
|
|||||||
return p_a.cubic_interpolate(p_b, p_pre_a, p_post_b, p_c);
|
return p_a.cubic_interpolate(p_b, p_pre_a, p_post_b, p_c);
|
||||||
}
|
}
|
||||||
|
|
||||||
Quat Animation::_cubic_interpolate(const Quat &p_pre_a, const Quat &p_a, const Quat &p_b, const Quat &p_post_b, float p_c) const {
|
Quaternion Animation::_cubic_interpolate(const Quaternion &p_pre_a, const Quaternion &p_a, const Quaternion &p_b, const Quaternion &p_post_b, float p_c) const {
|
||||||
return p_a.cubic_slerp(p_b, p_pre_a, p_post_b, p_c);
|
return p_a.cubic_slerp(p_b, p_pre_a, p_post_b, p_c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1555,11 +1555,11 @@ Variant Animation::_cubic_interpolate(const Variant &p_pre_a, const Variant &p_a
|
|||||||
|
|
||||||
return a.cubic_interpolate(b, pa, pb, p_c);
|
return a.cubic_interpolate(b, pa, pb, p_c);
|
||||||
}
|
}
|
||||||
case Variant::QUAT: {
|
case Variant::QUATERNION: {
|
||||||
Quat a = p_a;
|
Quaternion a = p_a;
|
||||||
Quat b = p_b;
|
Quaternion b = p_b;
|
||||||
Quat pa = p_pre_a;
|
Quaternion pa = p_pre_a;
|
||||||
Quat pb = p_post_b;
|
Quaternion pb = p_post_b;
|
||||||
|
|
||||||
return a.cubic_slerp(b, pa, pb, p_c);
|
return a.cubic_slerp(b, pa, pb, p_c);
|
||||||
}
|
}
|
||||||
@ -1728,7 +1728,7 @@ T Animation::_interpolate(const Vector<TKey<T>> &p_keys, float p_time, Interpola
|
|||||||
// do a barrel roll
|
// do a barrel roll
|
||||||
}
|
}
|
||||||
|
|
||||||
Error Animation::transform_track_interpolate(int p_track, float p_time, Vector3 *r_loc, Quat *r_rot, Vector3 *r_scale) const {
|
Error Animation::transform_track_interpolate(int p_track, float p_time, Vector3 *r_loc, Quaternion *r_rot, Vector3 *r_scale) const {
|
||||||
ERR_FAIL_INDEX_V(p_track, tracks.size(), ERR_INVALID_PARAMETER);
|
ERR_FAIL_INDEX_V(p_track, tracks.size(), ERR_INVALID_PARAMETER);
|
||||||
Track *t = tracks[p_track];
|
Track *t = tracks[p_track];
|
||||||
ERR_FAIL_COND_V(t->type != TYPE_TRANSFORM3D, ERR_INVALID_PARAMETER);
|
ERR_FAIL_COND_V(t->type != TYPE_TRANSFORM3D, ERR_INVALID_PARAMETER);
|
||||||
@ -2751,9 +2751,9 @@ bool Animation::_transform_track_optimize_key(const TKey<TransformKey> &t0, cons
|
|||||||
|
|
||||||
{ //rotation
|
{ //rotation
|
||||||
|
|
||||||
const Quat &q0 = t0.value.rot;
|
const Quaternion &q0 = t0.value.rot;
|
||||||
const Quat &q1 = t1.value.rot;
|
const Quaternion &q1 = t1.value.rot;
|
||||||
const Quat &q2 = t2.value.rot;
|
const Quaternion &q2 = t2.value.rot;
|
||||||
|
|
||||||
//localize both to rotation from q0
|
//localize both to rotation from q0
|
||||||
|
|
||||||
@ -2763,8 +2763,8 @@ bool Animation::_transform_track_optimize_key(const TKey<TransformKey> &t0, cons
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Quat r02 = (q0.inverse() * q2).normalized();
|
Quaternion r02 = (q0.inverse() * q2).normalized();
|
||||||
Quat r01 = (q0.inverse() * q1).normalized();
|
Quaternion r01 = (q0.inverse() * q1).normalized();
|
||||||
|
|
||||||
Vector3 v02, v01;
|
Vector3 v02, v01;
|
||||||
real_t a02, a01;
|
real_t a02, a01;
|
||||||
|
@ -88,7 +88,7 @@ private:
|
|||||||
|
|
||||||
struct TransformKey {
|
struct TransformKey {
|
||||||
Vector3 loc;
|
Vector3 loc;
|
||||||
Quat rot;
|
Quaternion rot;
|
||||||
Vector3 scale;
|
Vector3 scale;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -186,13 +186,13 @@ private:
|
|||||||
_FORCE_INLINE_ Animation::TransformKey _interpolate(const Animation::TransformKey &p_a, const Animation::TransformKey &p_b, float p_c) const;
|
_FORCE_INLINE_ Animation::TransformKey _interpolate(const Animation::TransformKey &p_a, const Animation::TransformKey &p_b, float p_c) const;
|
||||||
|
|
||||||
_FORCE_INLINE_ Vector3 _interpolate(const Vector3 &p_a, const Vector3 &p_b, float p_c) const;
|
_FORCE_INLINE_ Vector3 _interpolate(const Vector3 &p_a, const Vector3 &p_b, float p_c) const;
|
||||||
_FORCE_INLINE_ Quat _interpolate(const Quat &p_a, const Quat &p_b, float p_c) const;
|
_FORCE_INLINE_ Quaternion _interpolate(const Quaternion &p_a, const Quaternion &p_b, float p_c) const;
|
||||||
_FORCE_INLINE_ Variant _interpolate(const Variant &p_a, const Variant &p_b, float p_c) const;
|
_FORCE_INLINE_ Variant _interpolate(const Variant &p_a, const Variant &p_b, float p_c) const;
|
||||||
_FORCE_INLINE_ float _interpolate(const float &p_a, const float &p_b, float p_c) const;
|
_FORCE_INLINE_ float _interpolate(const float &p_a, const float &p_b, float p_c) const;
|
||||||
|
|
||||||
_FORCE_INLINE_ Animation::TransformKey _cubic_interpolate(const Animation::TransformKey &p_pre_a, const Animation::TransformKey &p_a, const Animation::TransformKey &p_b, const Animation::TransformKey &p_post_b, float p_c) const;
|
_FORCE_INLINE_ Animation::TransformKey _cubic_interpolate(const Animation::TransformKey &p_pre_a, const Animation::TransformKey &p_a, const Animation::TransformKey &p_b, const Animation::TransformKey &p_post_b, float p_c) const;
|
||||||
_FORCE_INLINE_ Vector3 _cubic_interpolate(const Vector3 &p_pre_a, const Vector3 &p_a, const Vector3 &p_b, const Vector3 &p_post_b, float p_c) const;
|
_FORCE_INLINE_ Vector3 _cubic_interpolate(const Vector3 &p_pre_a, const Vector3 &p_a, const Vector3 &p_b, const Vector3 &p_post_b, float p_c) const;
|
||||||
_FORCE_INLINE_ Quat _cubic_interpolate(const Quat &p_pre_a, const Quat &p_a, const Quat &p_b, const Quat &p_post_b, float p_c) const;
|
_FORCE_INLINE_ Quaternion _cubic_interpolate(const Quaternion &p_pre_a, const Quaternion &p_a, const Quaternion &p_b, const Quaternion &p_post_b, float p_c) const;
|
||||||
_FORCE_INLINE_ Variant _cubic_interpolate(const Variant &p_pre_a, const Variant &p_a, const Variant &p_b, const Variant &p_post_b, float p_c) const;
|
_FORCE_INLINE_ Variant _cubic_interpolate(const Variant &p_pre_a, const Variant &p_a, const Variant &p_b, const Variant &p_post_b, float p_c) const;
|
||||||
_FORCE_INLINE_ float _cubic_interpolate(const float &p_pre_a, const float &p_a, const float &p_b, const float &p_post_b, float p_c) const;
|
_FORCE_INLINE_ float _cubic_interpolate(const float &p_pre_a, const float &p_a, const float &p_b, const float &p_post_b, float p_c) const;
|
||||||
|
|
||||||
@ -213,7 +213,7 @@ private:
|
|||||||
private:
|
private:
|
||||||
Array _transform_track_interpolate(int p_track, float p_time) const {
|
Array _transform_track_interpolate(int p_track, float p_time) const {
|
||||||
Vector3 loc;
|
Vector3 loc;
|
||||||
Quat rot;
|
Quaternion rot;
|
||||||
Vector3 scale;
|
Vector3 scale;
|
||||||
transform_track_interpolate(p_track, p_time, &loc, &rot, &scale);
|
transform_track_interpolate(p_track, p_time, &loc, &rot, &scale);
|
||||||
Array ret;
|
Array ret;
|
||||||
@ -291,8 +291,8 @@ public:
|
|||||||
float track_get_key_time(int p_track, int p_key_idx) const;
|
float track_get_key_time(int p_track, int p_key_idx) const;
|
||||||
float track_get_key_transition(int p_track, int p_key_idx) const;
|
float track_get_key_transition(int p_track, int p_key_idx) const;
|
||||||
|
|
||||||
int transform_track_insert_key(int p_track, float p_time, const Vector3 &p_loc, const Quat &p_rot = Quat(), const Vector3 &p_scale = Vector3());
|
int transform_track_insert_key(int p_track, float p_time, const Vector3 &p_loc, const Quaternion &p_rot = Quaternion(), const Vector3 &p_scale = Vector3());
|
||||||
Error transform_track_get_key(int p_track, int p_key, Vector3 *r_loc, Quat *r_rot, Vector3 *r_scale) const;
|
Error transform_track_get_key(int p_track, int p_key, Vector3 *r_loc, Quaternion *r_rot, Vector3 *r_scale) const;
|
||||||
void track_set_interpolation_type(int p_track, InterpolationType p_interp);
|
void track_set_interpolation_type(int p_track, InterpolationType p_interp);
|
||||||
InterpolationType track_get_interpolation_type(int p_track) const;
|
InterpolationType track_get_interpolation_type(int p_track) const;
|
||||||
|
|
||||||
@ -321,7 +321,7 @@ public:
|
|||||||
void track_set_interpolation_loop_wrap(int p_track, bool p_enable);
|
void track_set_interpolation_loop_wrap(int p_track, bool p_enable);
|
||||||
bool track_get_interpolation_loop_wrap(int p_track) const;
|
bool track_get_interpolation_loop_wrap(int p_track) const;
|
||||||
|
|
||||||
Error transform_track_interpolate(int p_track, float p_time, Vector3 *r_loc, Quat *r_rot, Vector3 *r_scale) const;
|
Error transform_track_interpolate(int p_track, float p_time, Vector3 *r_loc, Quaternion *r_rot, Vector3 *r_scale) const;
|
||||||
|
|
||||||
Variant value_track_interpolate(int p_track, float p_time) const;
|
Variant value_track_interpolate(int p_track, float p_time) const;
|
||||||
void value_track_get_key_indices(int p_track, float p_time, float p_delta, List<int> *p_indices) const;
|
void value_track_get_key_indices(int p_track, float p_time, float p_delta, List<int> *p_indices) const;
|
||||||
|
@ -211,7 +211,7 @@ bool ConeTwistJoint3DSW::setup(real_t p_timestep) {
|
|||||||
// Twist limits
|
// Twist limits
|
||||||
if (m_twistSpan >= real_t(0.)) {
|
if (m_twistSpan >= real_t(0.)) {
|
||||||
Vector3 b2Axis22 = B->get_transform().basis.xform(this->m_rbBFrame.basis.get_axis(1));
|
Vector3 b2Axis22 = B->get_transform().basis.xform(this->m_rbBFrame.basis.get_axis(1));
|
||||||
Quat rotationArc = Quat(b2Axis1, b1Axis1);
|
Quaternion rotationArc = Quaternion(b2Axis1, b1Axis1);
|
||||||
Vector3 TwistRef = rotationArc.xform(b2Axis22);
|
Vector3 TwistRef = rotationArc.xform(b2Axis22);
|
||||||
real_t twist = atan2fast(TwistRef.dot(b1Axis3), TwistRef.dot(b1Axis2));
|
real_t twist = atan2fast(TwistRef.dot(b1Axis3), TwistRef.dot(b1Axis2));
|
||||||
|
|
||||||
|
@ -126,7 +126,7 @@ HingeJoint3DSW::HingeJoint3DSW(Body3DSW *rbA, Body3DSW *rbB, const Vector3 &pivo
|
|||||||
rbAxisA1.y, rbAxisA2.y, axisInA.y,
|
rbAxisA1.y, rbAxisA2.y, axisInA.y,
|
||||||
rbAxisA1.z, rbAxisA2.z, axisInA.z);
|
rbAxisA1.z, rbAxisA2.z, axisInA.z);
|
||||||
|
|
||||||
Quat rotationArc = Quat(axisInA, axisInB);
|
Quaternion rotationArc = Quaternion(axisInA, axisInB);
|
||||||
Vector3 rbAxisB1 = rotationArc.xform(rbAxisA1);
|
Vector3 rbAxisB1 = rotationArc.xform(rbAxisA1);
|
||||||
Vector3 rbAxisB2 = axisInB.cross(rbAxisB1);
|
Vector3 rbAxisB2 = axisInB.cross(rbAxisB1);
|
||||||
|
|
||||||
|
@ -1878,8 +1878,8 @@ _FORCE_INLINE_ static void _fill_std140_variant_ubo_value(ShaderLanguage::DataTy
|
|||||||
gui[1] = v.position.y;
|
gui[1] = v.position.y;
|
||||||
gui[2] = v.size.x;
|
gui[2] = v.size.x;
|
||||||
gui[3] = v.size.y;
|
gui[3] = v.size.y;
|
||||||
} else if (value.get_type() == Variant::QUAT) {
|
} else if (value.get_type() == Variant::QUATERNION) {
|
||||||
Quat v = value;
|
Quaternion v = value;
|
||||||
|
|
||||||
gui[0] = v.x;
|
gui[0] = v.x;
|
||||||
gui[1] = v.y;
|
gui[1] = v.y;
|
||||||
|
@ -243,7 +243,7 @@ bool arg_default_value_is_assignable_to_type(const Context &p_context, const Var
|
|||||||
case Variant::TRANSFORM3D:
|
case Variant::TRANSFORM3D:
|
||||||
case Variant::TRANSFORM2D:
|
case Variant::TRANSFORM2D:
|
||||||
case Variant::BASIS:
|
case Variant::BASIS:
|
||||||
case Variant::QUAT:
|
case Variant::QUATERNION:
|
||||||
case Variant::PLANE:
|
case Variant::PLANE:
|
||||||
case Variant::AABB:
|
case Variant::AABB:
|
||||||
case Variant::COLOR:
|
case Variant::COLOR:
|
||||||
|
@ -91,7 +91,7 @@ DOCTEST_STRINGIFY_VARIANT(Vector3);
|
|||||||
DOCTEST_STRINGIFY_VARIANT(Vector3i);
|
DOCTEST_STRINGIFY_VARIANT(Vector3i);
|
||||||
DOCTEST_STRINGIFY_VARIANT(Transform2D);
|
DOCTEST_STRINGIFY_VARIANT(Transform2D);
|
||||||
DOCTEST_STRINGIFY_VARIANT(Plane);
|
DOCTEST_STRINGIFY_VARIANT(Plane);
|
||||||
DOCTEST_STRINGIFY_VARIANT(Quat);
|
DOCTEST_STRINGIFY_VARIANT(Quaternion);
|
||||||
DOCTEST_STRINGIFY_VARIANT(AABB);
|
DOCTEST_STRINGIFY_VARIANT(AABB);
|
||||||
DOCTEST_STRINGIFY_VARIANT(Basis);
|
DOCTEST_STRINGIFY_VARIANT(Basis);
|
||||||
DOCTEST_STRINGIFY_VARIANT(Transform3D);
|
DOCTEST_STRINGIFY_VARIANT(Transform3D);
|
||||||
|
@ -599,13 +599,13 @@ MainLoop *test() {
|
|||||||
|
|
||||||
Basis m2(v2, a2);
|
Basis m2(v2, a2);
|
||||||
|
|
||||||
Quat q = m;
|
Quaternion q = m;
|
||||||
Quat q2 = m2;
|
Quaternion q2 = m2;
|
||||||
|
|
||||||
Basis m3 = m.inverse() * m2;
|
Basis m3 = m.inverse() * m2;
|
||||||
Quat q3 = (q.inverse() * q2); //.normalized();
|
Quaternion q3 = (q.inverse() * q2); //.normalized();
|
||||||
|
|
||||||
print_line(Quat(m3));
|
print_line(Quaternion(m3));
|
||||||
print_line(q3);
|
print_line(q3);
|
||||||
|
|
||||||
print_line("before v: " + v + " a: " + rtos(a));
|
print_line("before v: " + v + " a: " + rtos(a));
|
||||||
|
@ -84,7 +84,7 @@ TEST_SUITE("Validate tests") {
|
|||||||
Plane plane(Vector3(1, 1, 1), 1.0);
|
Plane plane(Vector3(1, 1, 1), 1.0);
|
||||||
INFO(plane);
|
INFO(plane);
|
||||||
|
|
||||||
Quat quat(Vector3(0.5, 1.0, 2.0));
|
Quaternion quat(Vector3(0.5, 1.0, 2.0));
|
||||||
INFO(quat);
|
INFO(quat);
|
||||||
|
|
||||||
AABB aabb(Vector3(), Vector3(100, 100, 100));
|
AABB aabb(Vector3(), Vector3(100, 100, 100));
|
||||||
|
Loading…
Reference in New Issue
Block a user