nalgebra_glm/
constructors.rs

1use crate::aliases::{
2    Qua, TMat, TMat2, TMat2x3, TMat2x4, TMat3, TMat3x2, TMat3x4, TMat4, TMat4x2, TMat4x3, TVec1,
3    TVec2, TVec3, TVec4,
4};
5use crate::RealNumber;
6use na::Scalar;
7
8/// Creates a new 1D vector.
9///
10/// # Examples:
11///
12/// Construct a vector of `bool`s:
13///
14/// ```
15/// # use nalgebra_glm as glm;
16/// let v = glm::vec1(true);
17/// ```
18pub fn vec1<T: Scalar>(x: T) -> TVec1<T> {
19    TVec1::new(x)
20}
21
22/// Creates a new 2D vector.
23pub fn vec2<T: Scalar>(x: T, y: T) -> TVec2<T> {
24    TVec2::new(x, y)
25}
26
27/// Creates a new 3D vector.
28pub fn vec3<T: Scalar>(x: T, y: T, z: T) -> TVec3<T> {
29    TVec3::new(x, y, z)
30}
31
32/// Creates a new 4D vector.
33pub fn vec4<T: Scalar>(x: T, y: T, z: T, w: T) -> TVec4<T> {
34    TVec4::new(x, y, z, w)
35}
36
37/// Create a new 2x2 matrix.
38#[rustfmt::skip]
39pub fn mat2<T: Scalar>(m11: T, m12: T,
40                       m21: T, m22: T) -> TMat2<T> {
41    TMat::<T, 2, 2>::new(
42        m11, m12,
43        m21, m22,
44    )
45}
46
47/// Create a new 2x2 matrix.
48#[rustfmt::skip]
49pub fn mat2x2<T: Scalar>(m11: T, m12: T,
50                         m21: T, m22: T) -> TMat2<T> {
51    TMat::<T, 2, 2>::new(
52        m11, m12,
53        m21, m22,
54    )
55}
56
57/// Create a new 2x3 matrix.
58#[rustfmt::skip]
59pub fn mat2x3<T: Scalar>(m11: T, m12: T, m13: T,
60                         m21: T, m22: T, m23: T) -> TMat2x3<T> {
61    TMat::<T, 2, 3>::new(
62        m11, m12, m13,
63        m21, m22, m23,
64    )
65}
66
67/// Create a new 2x4 matrix.
68#[rustfmt::skip]
69pub fn mat2x4<T: Scalar>(m11: T, m12: T, m13: T, m14: T,
70                         m21: T, m22: T, m23: T, m24: T) -> TMat2x4<T> {
71    TMat::<T, 2, 4>::new(
72        m11, m12, m13, m14,
73        m21, m22, m23, m24,
74    )
75}
76
77/// Create a new 3x3 matrix.
78///
79/// # Example
80/// ```
81/// # use nalgebra_glm::mat3;
82/// let m = mat3(
83///     1.0, 2.0, 3.0,
84///     4.0, 5.0, 6.0,
85///     7.0, 8.0, 9.0
86/// );
87/// assert!(
88///     m.m11 == 1.0 && m.m12 == 2.0 && m.m13 == 3.0 &&
89///     m.m21 == 4.0 && m.m22 == 5.0 && m.m23 == 6.0 &&
90///     m.m31 == 7.0 && m.m32 == 8.0 && m.m33 == 9.0
91/// );
92/// ```
93#[rustfmt::skip]
94#[allow(clippy::too_many_arguments)]
95pub fn mat3<T: Scalar>(m11: T, m12: T, m13: T,
96                       m21: T, m22: T, m23: T,
97                       m31: T, m32: T, m33: T) -> TMat3<T> {
98    TMat::<T, 3, 3>::new(
99        m11, m12, m13,
100        m21, m22, m23,
101        m31, m32, m33,
102    )
103}
104
105/// Create a new 3x2 matrix.
106#[rustfmt::skip]
107pub fn mat3x2<T: Scalar>(m11: T, m12: T,
108                         m21: T, m22: T,
109                         m31: T, m32: T) -> TMat3x2<T> {
110    TMat::<T, 3, 2>::new(
111        m11, m12,
112        m21, m22,
113        m31, m32,
114    )
115}
116
117/// Create a new 3x3 matrix.
118#[rustfmt::skip]
119#[allow(clippy::too_many_arguments)]
120pub fn mat3x3<T: Scalar>(m11: T, m12: T, m13: T,
121                         m21: T, m22: T, m23: T,
122                         m31: T, m32: T, m33: T) -> TMat3<T> {
123    TMat::<T, 3, 3>::new(
124        m11, m12, m13,
125        m21, m22, m23,
126        m31, m32, m33,
127    )
128}
129
130/// Create a new 3x4 matrix.
131#[rustfmt::skip]
132#[allow(clippy::too_many_arguments)]
133pub fn mat3x4<T: Scalar>(m11: T, m12: T, m13: T, m14: T,
134                         m21: T, m22: T, m23: T, m24: T,
135                         m31: T, m32: T, m33: T, m34: T) -> TMat3x4<T> {
136    TMat::<T, 3, 4>::new(
137        m11, m12, m13, m14,
138        m21, m22, m23, m24,
139        m31, m32, m33, m34,
140    )
141}
142
143/// Create a new 4x2 matrix.
144#[rustfmt::skip]
145pub fn mat4x2<T: Scalar>(m11: T, m12: T,
146                         m21: T, m22: T,
147                         m31: T, m32: T,
148                         m41: T, m42: T) -> TMat4x2<T> {
149    TMat::<T, 4, 2>::new(
150        m11, m12,
151        m21, m22,
152        m31, m32,
153        m41, m42,
154    )
155}
156
157/// Create a new 4x3 matrix.
158#[rustfmt::skip]
159#[allow(clippy::too_many_arguments)]
160pub fn mat4x3<T: Scalar>(m11: T, m12: T, m13: T,
161                         m21: T, m22: T, m23: T,
162                         m31: T, m32: T, m33: T,
163                         m41: T, m42: T, m43: T) -> TMat4x3<T> {
164    TMat::<T, 4, 3>::new(
165        m11, m12, m13,
166        m21, m22, m23,
167        m31, m32, m33,
168        m41, m42, m43,
169    )
170}
171
172/// Create a new 4x4 matrix.
173#[rustfmt::skip]
174#[allow(clippy::too_many_arguments)]
175pub fn mat4x4<T: Scalar>(m11: T, m12: T, m13: T, m14: T,
176                         m21: T, m22: T, m23: T, m24: T,
177                         m31: T, m32: T, m33: T, m34: T,
178                         m41: T, m42: T, m43: T, m44: T) -> TMat4<T> {
179    TMat::<T, 4, 4>::new(
180        m11, m12, m13, m14,
181        m21, m22, m23, m24,
182        m31, m32, m33, m34,
183        m41, m42, m43, m44,
184    )
185}
186
187/// Create a new 4x4 matrix.
188#[rustfmt::skip]
189#[allow(clippy::too_many_arguments)]
190pub fn mat4<T: Scalar>(m11: T, m12: T, m13: T, m14: T,
191                       m21: T, m22: T, m23: T, m24: T,
192                       m31: T, m32: T, m33: T, m34: T,
193                       m41: T, m42: T, m43: T, m44: T) -> TMat4<T> {
194    TMat::<T, 4, 4>::new(
195        m11, m12, m13, m14,
196        m21, m22, m23, m24,
197        m31, m32, m33, m34,
198        m41, m42, m43, m44,
199    )
200}
201
202/// Creates a new quaternion.
203pub fn quat<T: RealNumber>(x: T, y: T, z: T, w: T) -> Qua<T> {
204    Qua::new(w, x, y, z)
205}