
# Objective Introduce isometry types for describing relative and absolute position in mathematical contexts. ## Solution For the time being, this is a very minimal implementation. This implements the following faculties for two- and three-dimensional isometry types: - Identity transformations - Creation from translations and/or rotations - Inverses - Multiplication (composition) of isometries with each other - Application of isometries to points (as vectors) - Conversion of isometries to affine transformations There is obviously a lot more that could be added, so I erred on the side of adding things that I knew would be useful, with the idea of expanding this in the near future as needed. (I also fixed some random doc problems in `bevy_math`.) --- ## Design One point of interest here is the matter of if/when to use aligned types. In the implementation of 3d isometries, I used `Vec3A` rather than `Vec3` because it has no impact on size/alignment, but I'm still not sure about that decision (although it is easily changed). For 2d isometries — which are encoded by four floats — the idea of shoving them into a single 128-bit buffer (`__m128` or whatever) sounds kind of enticing, but it's more involved and would involve writing unsafe code, so I didn't do that for now. ## Future work - Expand the API to include shortcuts like `inverse_mul` and `inverse_transform` for efficiency reasons. - Include more convenience constructors and methods (e.g. `from_xy`, `from_xyz`). - Refactor `bevy_math::bounding` to use the isometry types. - Add conversions to/from isometries for `Transform`/`GlobalTransform` in `bevy_transform`.
63 lines
1.8 KiB
Rust
63 lines
1.8 KiB
Rust
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
|
#![forbid(unsafe_code)]
|
|
#![doc(
|
|
html_logo_url = "https://bevyengine.org/assets/icon.png",
|
|
html_favicon_url = "https://bevyengine.org/assets/icon.png"
|
|
)]
|
|
|
|
//! Provides math types and functionality for the Bevy game engine.
|
|
//!
|
|
//! The commonly used types are vectors like [`Vec2`] and [`Vec3`],
|
|
//! matrices like [`Mat2`], [`Mat3`] and [`Mat4`] and orientation representations
|
|
//! like [`Quat`].
|
|
|
|
mod affine3;
|
|
mod aspect_ratio;
|
|
pub mod bounding;
|
|
pub mod common_traits;
|
|
mod compass;
|
|
pub mod cubic_splines;
|
|
mod direction;
|
|
mod float_ord;
|
|
pub mod isometry;
|
|
pub mod primitives;
|
|
mod ray;
|
|
mod rects;
|
|
mod rotation2d;
|
|
#[cfg(feature = "rand")]
|
|
pub mod sampling;
|
|
pub use compass::{CompassOctant, CompassQuadrant};
|
|
|
|
pub use affine3::*;
|
|
pub use aspect_ratio::AspectRatio;
|
|
pub use common_traits::*;
|
|
pub use direction::*;
|
|
pub use float_ord::*;
|
|
pub use ray::{Ray2d, Ray3d};
|
|
pub use rects::*;
|
|
pub use rotation2d::Rot2;
|
|
#[cfg(feature = "rand")]
|
|
pub use sampling::{FromRng, ShapeSample};
|
|
|
|
/// The `bevy_math` prelude.
|
|
pub mod prelude {
|
|
#[doc(hidden)]
|
|
#[cfg(feature = "rand")]
|
|
pub use crate::sampling::{FromRng, ShapeSample};
|
|
#[doc(hidden)]
|
|
pub use crate::{
|
|
cubic_splines::{
|
|
CubicBSpline, CubicBezier, CubicCardinalSpline, CubicCurve, CubicGenerator,
|
|
CubicHermite, CubicNurbs, CubicNurbsError, CubicSegment, RationalCurve,
|
|
RationalGenerator, RationalSegment,
|
|
},
|
|
direction::{Dir2, Dir3, Dir3A},
|
|
primitives::*,
|
|
BVec2, BVec3, BVec4, EulerRot, FloatExt, IRect, IVec2, IVec3, IVec4, Mat2, Mat3, Mat4,
|
|
Quat, Ray2d, Ray3d, Rect, Rot2, StableInterpolate, URect, UVec2, UVec3, UVec4, Vec2,
|
|
Vec2Swizzles, Vec3, Vec3Swizzles, Vec4, Vec4Swizzles,
|
|
};
|
|
}
|
|
|
|
pub use glam::*;
|