2017-09-12 22:42:36 +02:00
<?xml version="1.0" encoding="UTF-8" ?>
2023-07-06 10:08:05 +02:00
<class name= "Basis" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "../class.xsd" >
2017-09-12 22:42:36 +02:00
<brief_description >
2023-04-28 01:35:33 +02:00
A 3× 3 matrix for representing 3D rotation and scale.
2017-09-12 22:42:36 +02:00
</brief_description>
<description >
2023-04-28 01:35:33 +02:00
A 3× 3 matrix used for representing 3D rotation and scale. Usually used as an orthogonal basis for a [Transform3D].
2020-07-21 20:07:00 +02:00
Contains 3 vector fields X, Y and Z as its columns, which are typically interpreted as the local basis vectors of a transformation. For such use, it is composed of a scaling and a rotation matrix, in that order (M = R.S).
2023-04-28 01:35:33 +02:00
Basis can also be accessed as an array of 3D vectors. These vectors are usually orthogonal to each other, but are not necessarily normalized (due to scaling).
2020-07-21 20:07:00 +02:00
For more information, read the "Matrices and transforms" documentation article.
2017-09-12 22:42:36 +02:00
</description>
<tutorials >
2021-11-15 10:43:07 +01:00
<link title= "Math documentation index" > $DOCS_URL/tutorials/math/index.html</link>
<link title= "Matrices and transforms" > $DOCS_URL/tutorials/math/matrices_and_transforms.html</link>
<link title= "Using 3D transforms" > $DOCS_URL/tutorials/3d/using_transforms.html</link>
2020-10-01 10:34:47 +02:00
<link title= "Matrix Transform Demo" > https://godotengine.org/asset-library/asset/584</link>
<link title= "3D Platformer Demo" > https://godotengine.org/asset-library/asset/125</link>
<link title= "3D Voxel Demo" > https://godotengine.org/asset-library/asset/676</link>
<link title= "2.5D Demo" > https://godotengine.org/asset-library/asset/583</link>
2017-09-12 22:42:36 +02:00
</tutorials>
2021-09-21 04:49:02 +02:00
<constructors >
<constructor name= "Basis" >
2021-07-30 15:28:05 +02:00
<return type= "Basis" />
2017-09-12 22:42:36 +02:00
<description >
2020-11-09 17:46:03 +01:00
Constructs a default-initialized [Basis] set to [constant IDENTITY].
2017-09-12 22:42:36 +02:00
</description>
2021-09-21 04:49:02 +02:00
</constructor>
<constructor name= "Basis" >
2021-07-30 15:28:05 +02:00
<return type= "Basis" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "from" type= "Basis" />
2017-09-12 22:42:36 +02:00
<description >
2020-11-09 17:46:03 +01:00
Constructs a [Basis] as a copy of the given [Basis].
2017-09-12 22:42:36 +02:00
</description>
2021-09-21 04:49:02 +02:00
</constructor>
<constructor name= "Basis" >
2021-07-30 15:28:05 +02:00
<return type= "Basis" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "axis" type= "Vector3" />
<param index= "1" name= "angle" type= "float" />
2017-09-12 22:42:36 +02:00
<description >
2022-08-12 19:13:27 +02:00
Constructs a pure rotation basis matrix, rotated around the given [param axis] by [param angle] (in radians). The axis must be a normalized vector.
2017-09-12 22:42:36 +02:00
</description>
2021-09-21 04:49:02 +02:00
</constructor>
<constructor name= "Basis" >
2021-07-30 15:28:05 +02:00
<return type= "Basis" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "from" type= "Quaternion" />
2020-11-09 17:46:03 +01:00
<description >
Constructs a pure rotation basis matrix from the given quaternion.
</description>
2021-09-21 04:49:02 +02:00
</constructor>
<constructor name= "Basis" >
2021-07-30 15:28:05 +02:00
<return type= "Basis" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "x_axis" type= "Vector3" />
<param index= "1" name= "y_axis" type= "Vector3" />
<param index= "2" name= "z_axis" type= "Vector3" />
2017-09-12 22:42:36 +02:00
<description >
2020-07-21 20:07:00 +02:00
Constructs a basis matrix from 3 axis vectors (matrix columns).
2017-09-12 22:42:36 +02:00
</description>
2021-09-21 04:49:02 +02:00
</constructor>
</constructors>
<methods >
2021-03-18 14:44:42 +01:00
<method name= "determinant" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "float" />
2017-09-12 22:42:36 +02:00
<description >
2020-07-21 20:07:00 +02:00
Returns the determinant of the basis matrix. If the basis is uniformly scaled, its determinant is the square of the scale.
A negative determinant means the basis has a negative scale. A zero determinant means the basis isn't invertible, and is usually considered invalid.
2017-09-12 22:42:36 +02:00
</description>
</method>
2021-10-21 18:38:20 +02:00
<method name= "from_euler" qualifiers= "static" >
<return type= "Basis" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "euler" type= "Vector3" />
<param index= "1" name= "order" type= "int" default= "2" />
2021-10-21 18:38:20 +02:00
<description >
2022-10-02 04:53:12 +02:00
Constructs a pure rotation Basis matrix from Euler angles in the specified Euler rotation order. By default, use YXZ order (most common). See the [enum EulerOrder] enum for possible values.
2021-10-21 18:38:20 +02:00
</description>
</method>
2021-09-06 22:39:01 +02:00
<method name= "from_scale" qualifiers= "static" >
<return type= "Basis" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "scale" type= "Vector3" />
2021-09-06 22:39:01 +02:00
<description >
Constructs a pure scale basis matrix with no rotation or shearing. The scale values are set as the diagonal of the matrix, and the other parts of the matrix are zero.
</description>
</method>
2021-03-18 14:44:42 +01:00
<method name= "get_euler" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Vector3" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "order" type= "int" default= "2" />
2017-09-12 22:42:36 +02:00
<description >
2022-09-24 19:15:02 +02:00
Returns the basis's rotation in the form of Euler angles. The Euler order depends on the [param order] parameter, by default it uses 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).
2021-01-20 08:02:02 +01:00
Consider using the [method get_rotation_quaternion] method instead, which returns a [Quaternion] quaternion instead of Euler angles.
2017-09-12 22:42:36 +02:00
</description>
</method>
2021-01-20 08:02:02 +01:00
<method name= "get_rotation_quaternion" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Quaternion" />
2019-04-15 14:49:41 +02:00
<description >
2019-12-03 17:09:26 +01:00
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.
2019-04-15 14:49:41 +02:00
</description>
</method>
2021-03-18 14:44:42 +01:00
<method name= "get_scale" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Vector3" />
2017-09-12 22:42:36 +02:00
<description >
Assuming that the matrix is the combination of a rotation and scaling, return the absolute value of scaling factors along each axis.
</description>
</method>
2021-03-18 14:44:42 +01:00
<method name= "inverse" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Basis" />
2017-09-12 22:42:36 +02:00
<description >
2019-05-24 04:15:43 +02:00
Returns the inverse of the matrix.
2017-09-12 22:42:36 +02:00
</description>
</method>
2023-09-07 16:43:22 +02:00
<method name= "is_conformal" qualifiers= "const" >
<return type= "bool" />
<description >
Returns [code]true[/code] if the basis is conformal, meaning it preserves angles and distance ratios, and may only be composed of rotation and uniform scale. Returns [code]false[/code] if the basis has non-uniform scale or shear/skew. This can be used to validate if the basis is non-distorted, which is important for physics and other use cases.
</description>
</method>
2021-03-18 14:44:42 +01:00
<method name= "is_equal_approx" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "bool" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "b" type= "Basis" />
2019-04-15 14:49:41 +02:00
<description >
2023-04-28 01:35:33 +02:00
Returns [code]true[/code] if this basis and [param b] are approximately equal, by calling [method @GlobalScope.is_equal_approx] on all vector components.
2019-04-15 14:49:41 +02:00
</description>
</method>
2022-08-11 10:12:27 +02:00
<method name= "is_finite" qualifiers= "const" >
<return type= "bool" />
<description >
2023-04-28 01:35:33 +02:00
Returns [code]true[/code] if this basis is finite, by calling [method @GlobalScope.is_finite] on all vector components.
2022-08-11 10:12:27 +02:00
</description>
</method>
2021-07-21 05:32:00 +02:00
<method name= "looking_at" qualifiers= "static" >
<return type= "Basis" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "target" type= "Vector3" />
<param index= "1" name= "up" type= "Vector3" default= "Vector3(0, 1, 0)" />
2023-04-15 10:01:43 +02:00
<param index= "2" name= "use_model_front" type= "bool" default= "false" />
2021-07-21 05:32:00 +02:00
<description >
2022-08-12 19:13:27 +02:00
Creates a Basis with a rotation such that the forward axis (-Z) points towards the [param target] position.
The up axis (+Y) points as close to the [param up] vector as possible while staying perpendicular to the forward axis. The resulting Basis is orthonormalized. The [param target] and [param up] vectors cannot be zero, and cannot be parallel to each other.
2023-02-07 18:48:33 +01:00
If [param use_model_front] is [code]true[/code], the +Z axis (asset front) is treated as forward (implies +X is left) and points toward the [param target] position. By default, the -Z axis (camera forward) is treated as forward (implies +X is right).
2021-07-21 05:32:00 +02:00
</description>
</method>
2021-03-18 14:44:42 +01:00
<method name= "orthonormalized" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Basis" />
2017-09-12 22:42:36 +02:00
<description >
2019-05-24 04:15:43 +02:00
Returns the orthonormalized version of the matrix (useful to call from time to time to avoid rounding error for orthogonal matrices). This performs a Gram-Schmidt orthonormalization on the basis of the matrix.
2017-09-12 22:42:36 +02:00
</description>
</method>
2021-03-18 14:44:42 +01:00
<method name= "rotated" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Basis" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "axis" type= "Vector3" />
<param index= "1" name= "angle" type= "float" />
2017-09-12 22:42:36 +02:00
<description >
2022-08-12 19:13:27 +02:00
Introduce an additional rotation around the given axis by [param angle] (in radians). The axis must be a normalized vector.
2017-09-12 22:42:36 +02:00
</description>
</method>
2021-03-18 14:44:42 +01:00
<method name= "scaled" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Basis" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "scale" type= "Vector3" />
2017-09-12 22:42:36 +02:00
<description >
2018-05-12 02:14:39 +02:00
Introduce an additional scaling specified by the given 3D scaling factor.
</description>
</method>
2021-03-18 14:44:42 +01:00
<method name= "slerp" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Basis" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "to" type= "Basis" />
<param index= "1" name= "weight" type= "float" />
2018-05-12 02:14:39 +02:00
<description >
Assuming that the matrix is a proper rotation matrix, slerp performs a spherical-linear interpolation with another rotation matrix.
2017-09-12 22:42:36 +02:00
</description>
</method>
2021-03-18 14:44:42 +01:00
<method name= "tdotx" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "float" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "with" type= "Vector3" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Transposed dot product with the X axis of the matrix.
2017-09-12 22:42:36 +02:00
</description>
</method>
2021-03-18 14:44:42 +01:00
<method name= "tdoty" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "float" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "with" type= "Vector3" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Transposed dot product with the Y axis of the matrix.
2017-09-12 22:42:36 +02:00
</description>
</method>
2021-03-18 14:44:42 +01:00
<method name= "tdotz" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "float" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "with" type= "Vector3" />
2017-09-12 22:42:36 +02:00
<description >
2019-06-22 01:04:47 +02:00
Transposed dot product with the Z axis of the matrix.
2017-09-12 22:42:36 +02:00
</description>
</method>
2021-03-18 14:44:42 +01:00
<method name= "transposed" qualifiers= "const" >
2021-07-30 15:28:05 +02:00
<return type= "Basis" />
2017-09-12 22:42:36 +02:00
<description >
2019-05-24 04:15:43 +02:00
Returns the transposed version of the matrix.
2017-09-12 22:42:36 +02:00
</description>
</method>
</methods>
<members >
2019-09-24 19:45:03 +02:00
<member name= "x" type= "Vector3" setter= "" getter= "" default= "Vector3(1, 0, 0)" >
2020-07-21 20:07:00 +02:00
The basis matrix's X vector (column 0). Equivalent to array index [code]0[/code].
2017-09-12 22:42:36 +02:00
</member>
2019-09-24 19:45:03 +02:00
<member name= "y" type= "Vector3" setter= "" getter= "" default= "Vector3(0, 1, 0)" >
2020-07-21 20:07:00 +02:00
The basis matrix's Y vector (column 1). Equivalent to array index [code]1[/code].
2017-09-12 22:42:36 +02:00
</member>
2019-09-24 19:45:03 +02:00
<member name= "z" type= "Vector3" setter= "" getter= "" default= "Vector3(0, 0, 1)" >
2020-07-21 20:07:00 +02:00
The basis matrix's Z vector (column 2). Equivalent to array index [code]2[/code].
2017-09-12 22:42:36 +02:00
</member>
</members>
<constants >
2019-09-24 19:45:03 +02:00
<constant name= "IDENTITY" value= "Basis(1, 0, 0, 0, 1, 0, 0, 0, 1)" >
2020-07-21 20:07:00 +02:00
The identity basis, with no rotation or scaling applied.
2023-10-02 20:11:43 +02:00
This is identical to creating [constructor Basis] without any parameters. This constant can be used to make your code clearer, and for consistency with C#.
2019-08-13 12:35:50 +02:00
</constant>
2019-09-24 19:45:03 +02:00
<constant name= "FLIP_X" value= "Basis(-1, 0, 0, 0, 1, 0, 0, 0, 1)" >
2019-12-03 17:09:26 +01:00
The basis that will flip something along the X axis when used in a transformation.
2019-08-13 12:35:50 +02:00
</constant>
2019-09-24 19:45:03 +02:00
<constant name= "FLIP_Y" value= "Basis(1, 0, 0, 0, -1, 0, 0, 0, 1)" >
2019-12-03 17:09:26 +01:00
The basis that will flip something along the Y axis when used in a transformation.
2019-08-13 12:35:50 +02:00
</constant>
2019-09-24 19:45:03 +02:00
<constant name= "FLIP_Z" value= "Basis(1, 0, 0, 0, 1, 0, 0, 0, -1)" >
2019-12-03 17:09:26 +01:00
The basis that will flip something along the Z axis when used in a transformation.
2019-08-13 12:35:50 +02:00
</constant>
2017-09-12 22:42:36 +02:00
</constants>
2021-09-21 04:49:02 +02:00
<operators >
<operator name= "operator !=" >
<return type= "bool" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "right" type= "Basis" />
2021-09-21 04:49:02 +02:00
<description >
2021-11-04 16:58:20 +01:00
Returns [code]true[/code] if the [Basis] matrices are not equal.
[b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
2021-09-21 04:49:02 +02:00
</description>
</operator>
<operator name= "operator *" >
<return type= "Basis" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "right" type= "Basis" />
2021-09-21 04:49:02 +02:00
<description >
2021-11-04 16:58:20 +01:00
Composes these two basis matrices by multiplying them together. This has the effect of transforming the second basis (the child) by the first basis (the parent).
2021-09-21 04:49:02 +02:00
</description>
</operator>
<operator name= "operator *" >
<return type= "Vector3" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "right" type= "Vector3" />
2021-09-21 04:49:02 +02:00
<description >
2021-11-04 16:58:20 +01:00
Transforms (multiplies) the [Vector3] by the given [Basis] matrix.
2021-09-21 04:49:02 +02:00
</description>
</operator>
<operator name= "operator *" >
<return type= "Basis" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "right" type= "float" />
2021-09-21 04:49:02 +02:00
<description >
This operator multiplies all components of the [Basis], which scales it uniformly.
</description>
</operator>
<operator name= "operator *" >
<return type= "Basis" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "right" type= "int" />
2021-09-21 04:49:02 +02:00
<description >
This operator multiplies all components of the [Basis], which scales it uniformly.
</description>
</operator>
<operator name= "operator ==" >
<return type= "bool" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "right" type= "Basis" />
2021-09-21 04:49:02 +02:00
<description >
2021-11-04 16:58:20 +01:00
Returns [code]true[/code] if the [Basis] matrices are exactly equal.
[b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
2021-09-21 04:49:02 +02:00
</description>
</operator>
<operator name= "operator []" >
<return type= "Vector3" />
2022-08-06 20:11:48 +02:00
<param index= "0" name= "index" type= "int" />
2021-09-21 04:49:02 +02:00
<description >
2021-11-04 16:58:20 +01:00
Access basis components using their index. [code]b[0][/code] is equivalent to [code]b.x[/code], [code]b[1][/code] is equivalent to [code]b.y[/code], and [code]b[2][/code] is equivalent to [code]b.z[/code].
2021-09-21 04:49:02 +02:00
</description>
</operator>
</operators>
2017-09-12 22:42:36 +02:00
</class>