This document is for a version of USD that is under development. See this page for the current release.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
matrix4f.h
Go to the documentation of this file.
1//
2// Copyright 2016 Pixar
3//
4// Licensed under the terms set forth in the LICENSE.txt file available at
5// https://openusd.org/license.
6//
8// This file is generated by a script. Do not edit directly. Edit the
9// matrix4.template.h file to make changes.
10
11#ifndef PXR_BASE_GF_MATRIX4F_H
12#define PXR_BASE_GF_MATRIX4F_H
13
16
17#include "pxr/pxr.h"
18#include "pxr/base/gf/api.h"
19#include "pxr/base/gf/declare.h"
20#include "pxr/base/gf/matrixData.h"
21#include "pxr/base/gf/vec4f.h"
22#include "pxr/base/gf/traits.h"
24#include "pxr/base/gf/limits.h"
25#include "pxr/base/gf/math.h"
26#include "pxr/base/gf/vec3f.h"
27#include "pxr/base/tf/hash.h"
28
29#include <iosfwd>
30#include <vector>
31
32PXR_NAMESPACE_OPEN_SCOPE
33
34template <>
35struct GfIsGfMatrix<class GfMatrix4f> { static const bool value = true; };
36
37class GfMatrix4d;
38class GfMatrix4f;
39class GfQuatf;
40class GfRotation;
41class GfMatrix3f;
42
71{
72public:
73 typedef float ScalarType;
74
75 static const size_t numRows = 4;
76 static const size_t numColumns = 4;
77
79 GfMatrix4f() = default;
80
84 GfMatrix4f(float m00, float m01, float m02, float m03,
85 float m10, float m11, float m12, float m13,
86 float m20, float m21, float m22, float m23,
87 float m30, float m31, float m32, float m33) {
88 Set(m00, m01, m02, m03,
89 m10, m11, m12, m13,
90 m20, m21, m22, m23,
91 m30, m31, m32, m33);
92 }
93
96 GfMatrix4f(const float m[4][4]) {
97 Set(m);
98 }
99
102 explicit GfMatrix4f(float s) {
103 SetDiagonal(s);
104 }
105
108 explicit GfMatrix4f(const GfVec4f& v) {
109 SetDiagonal(v);
110 }
111
118 GF_API
119 explicit GfMatrix4f(const std::vector< std::vector<double> >& v);
120
127 GF_API
128 explicit GfMatrix4f(const std::vector< std::vector<float> >& v);
129
136 GF_API
137 explicit GfMatrix4f(const std::vector<double>& r0,
138 const std::vector<double>& r1,
139 const std::vector<double>& r2,
140 const std::vector<double>& r3);
141
148 GF_API
149 explicit GfMatrix4f(const std::vector<float>& r0,
150 const std::vector<float>& r1,
151 const std::vector<float>& r2,
152 const std::vector<float>& r3);
153
156 GF_API
157 GfMatrix4f(const GfRotation& rotate,
158 const GfVec3f& translate);
159
162 GF_API
163 GfMatrix4f(const GfMatrix3f& rotmx,
164 const GfVec3f& translate);
166 GF_API
167 explicit GfMatrix4f(const class GfMatrix4d& m);
168
170 void SetRow(int i, const GfVec4f & v) {
171 _mtx[i][0] = v[0];
172 _mtx[i][1] = v[1];
173 _mtx[i][2] = v[2];
174 _mtx[i][3] = v[3];
175 }
176
178 void SetColumn(int i, const GfVec4f & v) {
179 _mtx[0][i] = v[0];
180 _mtx[1][i] = v[1];
181 _mtx[2][i] = v[2];
182 _mtx[3][i] = v[3];
183 }
184
186 GfVec4f GetRow(int i) const {
187 return GfVec4f(_mtx[i][0], _mtx[i][1], _mtx[i][2], _mtx[i][3]);
188 }
189
191 GfVec4f GetColumn(int i) const {
192 return GfVec4f(_mtx[0][i], _mtx[1][i], _mtx[2][i], _mtx[3][i]);
193 }
194
198 GfMatrix4f& Set(float m00, float m01, float m02, float m03,
199 float m10, float m11, float m12, float m13,
200 float m20, float m21, float m22, float m23,
201 float m30, float m31, float m32, float m33) {
202 _mtx[0][0] = m00; _mtx[0][1] = m01; _mtx[0][2] = m02; _mtx[0][3] = m03;
203 _mtx[1][0] = m10; _mtx[1][1] = m11; _mtx[1][2] = m12; _mtx[1][3] = m13;
204 _mtx[2][0] = m20; _mtx[2][1] = m21; _mtx[2][2] = m22; _mtx[2][3] = m23;
205 _mtx[3][0] = m30; _mtx[3][1] = m31; _mtx[3][2] = m32; _mtx[3][3] = m33;
206 return *this;
207 }
208
211 GfMatrix4f& Set(const float m[4][4]) {
212 _mtx[0][0] = m[0][0];
213 _mtx[0][1] = m[0][1];
214 _mtx[0][2] = m[0][2];
215 _mtx[0][3] = m[0][3];
216 _mtx[1][0] = m[1][0];
217 _mtx[1][1] = m[1][1];
218 _mtx[1][2] = m[1][2];
219 _mtx[1][3] = m[1][3];
220 _mtx[2][0] = m[2][0];
221 _mtx[2][1] = m[2][1];
222 _mtx[2][2] = m[2][2];
223 _mtx[2][3] = m[2][3];
224 _mtx[3][0] = m[3][0];
225 _mtx[3][1] = m[3][1];
226 _mtx[3][2] = m[3][2];
227 _mtx[3][3] = m[3][3];
228 return *this;
229 }
230
233 return SetDiagonal(1);
234 }
235
238 return SetDiagonal(0);
239 }
240
242 GF_API
244
246 GF_API
248
251 GF_API
252 float* Get(float m[4][4]) const;
253
256 float* data() {
257 return _mtx.GetData();
258 }
259
262 const float* data() const {
263 return _mtx.GetData();
264 }
265
267 float* GetArray() {
268 return _mtx.GetData();
269 }
270
272 const float* GetArray() const {
273 return _mtx.GetData();
274 }
275
279 float* operator [](int i) { return _mtx[i]; }
280
284 const float* operator [](int i) const { return _mtx[i]; }
285
287 friend inline size_t hash_value(GfMatrix4f const &m) {
288 return TfHash::Combine(
289 m._mtx[0][0],
290 m._mtx[0][1],
291 m._mtx[0][2],
292 m._mtx[0][3],
293 m._mtx[1][0],
294 m._mtx[1][1],
295 m._mtx[1][2],
296 m._mtx[1][3],
297 m._mtx[2][0],
298 m._mtx[2][1],
299 m._mtx[2][2],
300 m._mtx[2][3],
301 m._mtx[3][0],
302 m._mtx[3][1],
303 m._mtx[3][2],
304 m._mtx[3][3]
305 );
306 }
307
310 GF_API
311 bool operator ==(const GfMatrix4d& m) const;
312
315 GF_API
316 bool operator ==(const GfMatrix4f& m) const;
317
320 bool operator !=(const GfMatrix4d& m) const {
321 return !(*this == m);
322 }
323
326 bool operator !=(const GfMatrix4f& m) const {
327 return !(*this == m);
328 }
329
331 GF_API
333
339 GF_API
340 GfMatrix4f GetInverse(double* det = NULL, double eps = 0) const;
341
343 GF_API
344 double GetDeterminant() const;
345
348 void SetRow3(int i, const GfVec3f & v) {
349 _mtx[i][0] = v[0];
350 _mtx[i][1] = v[1];
351 _mtx[i][2] = v[2];
352 }
353
355 GfVec3f GetRow3(int i) const {
356 return GfVec3f(_mtx[i][0], _mtx[i][1], _mtx[i][2]);
357 }
358
362 double GetDeterminant3() const {
363 return _GetDeterminant3(0, 1, 2, 0, 1, 2);
364 }
365
369 bool HasOrthogonalRows3() const {
370 // XXX Should add GfAreOrthogonal(v0, v1, v2) (which also
371 // GfRotation::Decompose() could use).
372 GfVec3f axis0(GetRow3(0)), axis1(GetRow3(1)), axis2(GetRow3(2));
373 return (GfAbs(GfDot(axis0, axis1)) < GF_MIN_ORTHO_TOLERANCE &&
374 GfAbs(GfDot(axis0, axis2)) < GF_MIN_ORTHO_TOLERANCE &&
375 GfAbs(GfDot(axis1, axis2)) < GF_MIN_ORTHO_TOLERANCE);
376 }
377
386 GF_API
387 bool Orthonormalize(bool issueWarning=true);
388
390 GF_API
391 GfMatrix4f GetOrthonormalized(bool issueWarning=true) const;
392
396 GF_API
397 double GetHandedness() const;
398
401 bool IsRightHanded() const {
402 return GetHandedness() == 1.0;
403 }
404
407 bool IsLeftHanded() const {
408 return GetHandedness() == -1.0;
409 }
410
412 GF_API
414
416 GF_API
418
420 friend GfMatrix4f operator *(const GfMatrix4f& m1, double d)
421 {
422 GfMatrix4f m = m1;
423 return m *= d;
424 }
425
427 // Returns the product of a matrix and a float.
428 friend GfMatrix4f operator *(double d, const GfMatrix4f& m)
429 {
430 return m * d;
431 }
432
434 GF_API
436
438 GF_API
440
442 GF_API
444
446 friend GfMatrix4f operator +(const GfMatrix4f& m1, const GfMatrix4f& m2)
447 {
448 GfMatrix4f tmp(m1);
449 tmp += m2;
450 return tmp;
451 }
452
454 friend GfMatrix4f operator -(const GfMatrix4f& m1, const GfMatrix4f& m2)
455 {
456 GfMatrix4f tmp(m1);
457 tmp -= m2;
458 return tmp;
459 }
460
462 friend GfMatrix4f operator *(const GfMatrix4f& m1, const GfMatrix4f& m2)
463 {
464 GfMatrix4f tmp(m1);
465 tmp *= m2;
466 return tmp;
467 }
468
470 friend GfMatrix4f operator /(const GfMatrix4f& m1, const GfMatrix4f& m2)
471 {
472 return(m1 * m2.GetInverse());
473 }
474
476 friend inline GfVec4f operator *(const GfMatrix4f& m, const GfVec4f& vec) {
477 return GfVec4f(vec[0] * m._mtx[0][0] + vec[1] * m._mtx[0][1] + vec[2] * m._mtx[0][2] + vec[3] * m._mtx[0][3],
478 vec[0] * m._mtx[1][0] + vec[1] * m._mtx[1][1] + vec[2] * m._mtx[1][2] + vec[3] * m._mtx[1][3],
479 vec[0] * m._mtx[2][0] + vec[1] * m._mtx[2][1] + vec[2] * m._mtx[2][2] + vec[3] * m._mtx[2][3],
480 vec[0] * m._mtx[3][0] + vec[1] * m._mtx[3][1] + vec[2] * m._mtx[3][2] + vec[3] * m._mtx[3][3]);
481 }
482
484 friend inline GfVec4f operator *(const GfVec4f &vec, const GfMatrix4f& m) {
485 return GfVec4f(vec[0] * m._mtx[0][0] + vec[1] * m._mtx[1][0] + vec[2] * m._mtx[2][0] + vec[3] * m._mtx[3][0],
486 vec[0] * m._mtx[0][1] + vec[1] * m._mtx[1][1] + vec[2] * m._mtx[2][1] + vec[3] * m._mtx[3][1],
487 vec[0] * m._mtx[0][2] + vec[1] * m._mtx[1][2] + vec[2] * m._mtx[2][2] + vec[3] * m._mtx[3][2],
488 vec[0] * m._mtx[0][3] + vec[1] * m._mtx[1][3] + vec[2] * m._mtx[2][3] + vec[3] * m._mtx[3][3]);
489 }
490
492 GF_API
493 GfMatrix4f& SetScale(float scaleFactor);
494
498 GF_API
500
503
506 GF_API
508
511 GF_API
513
516 GF_API
518
521 GF_API
523
526 GF_API
528
531 GF_API
533
536 GF_API
537 GfMatrix4f& SetScale(const GfVec3f &scaleFactors);
538
541 GF_API
543
546 GF_API
548
551 GF_API
553 const GfVec3f& translate);
554
557 GF_API
559 const GfVec3f& translate);
560
566 GF_API
567 GfMatrix4f& SetLookAt(const GfVec3f &eyePoint,
568 const GfVec3f &centerPoint,
569 const GfVec3f &upDirection);
570
576 GF_API
577 GfMatrix4f& SetLookAt(const GfVec3f &eyePoint,
578 const GfRotation &orientation);
579
594 GF_API
596 GfVec3f* t, GfMatrix4f* p,
597 float eps = 1e-5) const;
598
602 return GfVec3f(_mtx[3][0], _mtx[3][1], _mtx[3][2]);
603 }
604
610 GF_API
612
618 GF_API
620
626 GF_API
628 const GfVec3f &axis1,
629 const GfVec3f &axis2) const;
630
636 GF_API
638
642 GfVec3d Transform(const GfVec3d &vec) const {
643 return GfProject(GfVec4d(
644 vec[0] * _mtx[0][0] + vec[1] * _mtx[1][0] + vec[2] * _mtx[2][0] + _mtx[3][0],
645 vec[0] * _mtx[0][1] + vec[1] * _mtx[1][1] + vec[2] * _mtx[2][1] + _mtx[3][1],
646 vec[0] * _mtx[0][2] + vec[1] * _mtx[1][2] + vec[2] * _mtx[2][2] + _mtx[3][2],
647 vec[0] * _mtx[0][3] + vec[1] * _mtx[1][3] + vec[2] * _mtx[2][3] + _mtx[3][3]));
648 }
649
654 GfVec3f Transform(const GfVec3f &vec) const {
655 return (GfProject(GfVec4f(
656 vec[0] * _mtx[0][0] + vec[1] * _mtx[1][0] + vec[2] * _mtx[2][0] + _mtx[3][0],
657 vec[0] * _mtx[0][1] + vec[1] * _mtx[1][1] + vec[2] * _mtx[2][1] + _mtx[3][1],
658 vec[0] * _mtx[0][2] + vec[1] * _mtx[1][2] + vec[2] * _mtx[2][2] + _mtx[3][2],
659 vec[0] * _mtx[0][3] + vec[1] * _mtx[1][3] + vec[2] * _mtx[2][3] + _mtx[3][3])));
660 }
661
666 GfVec3d TransformDir(const GfVec3d &vec) const {
667 return GfVec3d(
668 vec[0] * _mtx[0][0] + vec[1] * _mtx[1][0] + vec[2] * _mtx[2][0],
669 vec[0] * _mtx[0][1] + vec[1] * _mtx[1][1] + vec[2] * _mtx[2][1],
670 vec[0] * _mtx[0][2] + vec[1] * _mtx[1][2] + vec[2] * _mtx[2][2]);
671 }
672
679 GfVec3f TransformDir(const GfVec3f &vec) const {
680 return GfVec3f(
681 vec[0] * _mtx[0][0] + vec[1] * _mtx[1][0] + vec[2] * _mtx[2][0],
682 vec[0] * _mtx[0][1] + vec[1] * _mtx[1][1] + vec[2] * _mtx[2][1],
683 vec[0] * _mtx[0][2] + vec[1] * _mtx[1][2] + vec[2] * _mtx[2][2]);
684 }
685
690 GfVec3d TransformAffine(const GfVec3d &vec) const {
691 return GfVec3d(
692 vec[0] * _mtx[0][0] + vec[1] * _mtx[1][0] + vec[2] * _mtx[2][0] + _mtx[3][0],
693 vec[0] * _mtx[0][1] + vec[1] * _mtx[1][1] + vec[2] * _mtx[2][1] + _mtx[3][1],
694 vec[0] * _mtx[0][2] + vec[1] * _mtx[1][2] + vec[2] * _mtx[2][2] + _mtx[3][2]);
695 }
696
701 GfVec3f TransformAffine(const GfVec3f &vec) const {
702 return GfVec3f(
703 vec[0] * _mtx[0][0] + vec[1] * _mtx[1][0] + vec[2] * _mtx[2][0] + _mtx[3][0],
704 vec[0] * _mtx[0][1] + vec[1] * _mtx[1][1] + vec[2] * _mtx[2][1] + _mtx[3][1],
705 vec[0] * _mtx[0][2] + vec[1] * _mtx[1][2] + vec[2] * _mtx[2][2] + _mtx[3][2]);
706 }
708
709private:
712 GF_API
713 double _GetDeterminant3(size_t row1, size_t row2, size_t row3,
714 size_t col1, size_t col2, size_t col3) const;
715
717 void _Jacobi3(GfVec3d *eigenvalues, GfVec3d eigenvectors[3]) const;
718
721 void _SetRotateFromQuat(float r, const GfVec3f& i);
722
723
724private:
727
728 // Friend declarations
729 friend class GfMatrix4d;
730};
731
732
736GF_API
737bool GfIsClose(GfMatrix4f const &m1, GfMatrix4f const &m2, double tolerance);
738
741GF_API std::ostream& operator<<(std::ostream &, GfMatrix4f const &);
742
743PXR_NAMESPACE_CLOSE_SCOPE
744
745#endif // PXR_BASE_GF_MATRIX4F_H
Declares Gf types.
Stores a 3x3 matrix of float elements.
Definition: matrix3f.h:65
Stores a 4x4 matrix of double elements.
Definition: matrix4d.h:71
Stores a 4x4 matrix of float elements.
Definition: matrix4f.h:71
GF_API GfMatrix4f & SetLookAt(const GfVec3f &eyePoint, const GfRotation &orientation)
Sets the matrix to specify a viewing matrix from a world-space eyePoint and a world-space rotation th...
const float * GetArray() const
Returns vector components as a const array of float values.
Definition: matrix4f.h:272
GF_API GfQuatf ExtractRotationQuat() const
Return the rotation corresponding to this matrix as a quaternion.
GF_API GfMatrix4f(const std::vector< float > &r0, const std::vector< float > &r1, const std::vector< float > &r2, const std::vector< float > &r3)
Constructor.
GfMatrix4f & Set(const float m[4][4])
Sets the matrix from a 4x4 array of float values, specified in row-major order.
Definition: matrix4f.h:211
bool HasOrthogonalRows3() const
Returns true, if the row vectors of the upper 3x3 matrix form an orthogonal basis.
Definition: matrix4f.h:369
float * data()
Returns raw access to components of matrix as an array of float values.
Definition: matrix4f.h:256
GF_API GfMatrix4f & SetTranslateOnly(const GfVec3f &t)
Sets matrix to specify a translation by the vector trans, without clearing the rotation.
GfVec3d Transform(const GfVec3d &vec) const
Transforms the row vector vec by the matrix, returning the result.
Definition: matrix4f.h:642
GF_API GfMatrix4f GetOrthonormalized(bool issueWarning=true) const
Returns an orthonormalized copy of the matrix.
GF_API GfMatrix4f & operator*=(const GfMatrix4f &m)
Post-multiplies matrix m into this matrix.
GfMatrix4f & SetIdentity()
Sets the matrix to the identity matrix.
Definition: matrix4f.h:232
GF_API GfMatrix4f & SetTranslate(const GfVec3f &trans)
Sets matrix to specify a translation by the vector trans, and clears the rotation.
GF_API GfMatrix4f & SetRotate(const GfRotation &rot)
Sets the matrix to specify a rotation equivalent to rot, and clears the translation.
GF_API GfMatrix4f & SetTransform(const GfRotation &rotate, const GfVec3f &translate)
Sets matrix to specify a rotation by rotate and a translation by translate.
friend GfMatrix4f operator*(const GfMatrix4f &m1, double d)
Returns the product of a matrix and a float.
Definition: matrix4f.h:420
GF_API GfMatrix4f GetTranspose() const
Returns the transpose of the matrix.
GfVec3f ExtractTranslation() const
Returns the translation part of the matrix, defined as the first three elements of the last row.
Definition: matrix4f.h:601
GfVec3d TransformDir(const GfVec3d &vec) const
Transforms row vector vec by the matrix, returning the result.
Definition: matrix4f.h:666
GF_API GfMatrix4f & operator-=(const GfMatrix4f &m)
Subtracts matrix m from this matrix.
GfMatrix4f & Set(float m00, float m01, float m02, float m03, float m10, float m11, float m12, float m13, float m20, float m21, float m22, float m23, float m30, float m31, float m32, float m33)
Sets the matrix from 16 independent float values, specified in row-major order.
Definition: matrix4f.h:198
GF_API GfMatrix4f(const std::vector< double > &r0, const std::vector< double > &r1, const std::vector< double > &r2, const std::vector< double > &r3)
Constructor.
GF_API GfMatrix4f & SetScale(float scaleFactor)
Sets matrix to specify a uniform scaling by scaleFactor.
GF_API GfMatrix4f & SetDiagonal(const GfVec4f &)
Sets the matrix to have diagonal (v[0], v[1], v[2], v[3]).
GF_API GfMatrix4f & SetRotateOnly(const GfQuatf &rot)
Sets the matrix to specify a rotation equivalent to rot, without clearing the translation.
void SetRow3(int i, const GfVec3f &v)
Sets a row of the matrix from a Vec3.
Definition: matrix4f.h:348
const float * data() const
Returns const raw access to components of matrix as an array of float values.
Definition: matrix4f.h:262
GF_API GfMatrix4f & SetRotateOnly(const GfRotation &rot)
Sets the matrix to specify a rotation equivalent to rot, without clearing the translation.
GF_API GfMatrix4f & operator+=(const GfMatrix4f &m)
Adds matrix m to this matrix.
GfMatrix4f & SetZero()
Sets the matrix to zero.
Definition: matrix4f.h:237
friend GfMatrix4f operator/(const GfMatrix4f &m1, const GfMatrix4f &m2)
Divides matrix m1 by m2 (that is, m1 * inv(m2)).
Definition: matrix4f.h:470
GF_API double GetDeterminant() const
Returns the determinant of the matrix.
GF_API GfVec3f DecomposeRotation(const GfVec3f &axis0, const GfVec3f &axis1, const GfVec3f &axis2) const
Decompose the rotation corresponding to this matrix about 3 orthogonal axes.
GfVec3f GetRow3(int i) const
Gets a row of the matrix as a Vec3.
Definition: matrix4f.h:355
GF_API GfMatrix4f GetInverse(double *det=NULL, double eps=0) const
Returns the inverse of the matrix, or FLT_MAX * SetIdentity() if the matrix is singular.
friend size_t hash_value(GfMatrix4f const &m)
Hash.
Definition: matrix4f.h:287
GF_API GfMatrix4f & SetRotateOnly(const GfMatrix3f &mx)
Sets the matrix to specify a rotation equivalent to mx, without clearing the translation.
GF_API bool Factor(GfMatrix4f *r, GfVec3f *s, GfMatrix4f *u, GfVec3f *t, GfMatrix4f *p, float eps=1e-5) const
Factors the matrix into 5 components:
GF_API GfMatrix4f(const std::vector< std::vector< double > > &v)
Constructor.
GF_API float * Get(float m[4][4]) const
Fills a 4x4 array of float values with the values in the matrix, specified in row-major order.
GF_API GfMatrix4f(const std::vector< std::vector< float > > &v)
Constructor.
bool operator!=(const GfMatrix4d &m) const
Tests for element-wise matrix inequality.
Definition: matrix4f.h:320
friend GfMatrix4f operator+(const GfMatrix4f &m1, const GfMatrix4f &m2)
Adds matrix m2 to m1.
Definition: matrix4f.h:446
GF_API GfMatrix4f & SetRotate(const GfQuatf &rot)
Sets the matrix to specify a rotation equivalent to rot, and clears the translation.
GF_API GfMatrix4f(const GfRotation &rotate, const GfVec3f &translate)
Constructor.
GF_API friend GfMatrix4f operator-(const GfMatrix4f &m)
Returns the unary negation of matrix m.
float * operator[](int i)
Accesses an indexed row i of the matrix as an array of 4 float values so that standard indexing (such...
Definition: matrix4f.h:279
GF_API bool operator==(const GfMatrix4d &m) const
Tests for element-wise matrix equality.
GfMatrix4f(float m00, float m01, float m02, float m03, float m10, float m11, float m12, float m13, float m20, float m21, float m22, float m23, float m30, float m31, float m32, float m33)
Constructor.
Definition: matrix4f.h:84
GF_API GfMatrix3f ExtractRotationMatrix() const
Returns the rotation corresponding to this matrix.
GF_API double GetHandedness() const
Returns the sign of the determinant of the upper 3x3 matrix, i.e.
GfVec3f TransformDir(const GfVec3f &vec) const
Transforms row vector vec by the matrix, returning the result.
Definition: matrix4f.h:679
void SetRow(int i, const GfVec4f &v)
Sets a row of the matrix from a Vec4.
Definition: matrix4f.h:170
float * GetArray()
Returns vector components as an array of float values.
Definition: matrix4f.h:267
GF_API GfMatrix4f & SetScale(const GfVec3f &scaleFactors)
Sets the matrix to specify a nonuniform scaling in x, y, and z by the factors in vector scaleFactors.
GfMatrix4f(const float m[4][4])
Constructor.
Definition: matrix4f.h:96
GF_API GfMatrix4f(const GfMatrix3f &rotmx, const GfVec3f &translate)
Constructor.
GF_API GfMatrix4f & SetLookAt(const GfVec3f &eyePoint, const GfVec3f &centerPoint, const GfVec3f &upDirection)
Sets the matrix to specify a viewing matrix from parameters similar to those used by gluLookAt(3G).
GfVec3d TransformAffine(const GfVec3d &vec) const
Transforms the row vector vec by the matrix, returning the result.
Definition: matrix4f.h:690
GF_API bool Orthonormalize(bool issueWarning=true)
Makes the matrix orthonormal in place.
bool IsLeftHanded() const
Returns true if the vectors in the upper 3x3 matrix form a left-handed coordinate system.
Definition: matrix4f.h:407
GfMatrix4f(float s)
Constructor.
Definition: matrix4f.h:102
GF_API GfMatrix4f(const class GfMatrix4d &m)
This explicit constructor converts a "double" matrix to a "float" matrix.
GfMatrix4f()=default
Default constructor. Leaves the matrix component values undefined.
double GetDeterminant3() const
Returns the determinant of the upper 3x3 matrix.
Definition: matrix4f.h:362
GF_API GfMatrix4f & SetTransform(const GfMatrix3f &rotmx, const GfVec3f &translate)
Sets matrix to specify a rotation by rotmx and a translation by translate.
GfVec3f Transform(const GfVec3f &vec) const
Transforms the row vector vec by the matrix, returning the result.
Definition: matrix4f.h:654
GfMatrix4f(const GfVec4f &v)
Constructor.
Definition: matrix4f.h:108
bool IsRightHanded() const
Returns true if the vectors in the upper 3x3 matrix form a right-handed coordinate system.
Definition: matrix4f.h:401
void SetColumn(int i, const GfVec4f &v)
Sets a column of the matrix from a Vec4.
Definition: matrix4f.h:178
GF_API GfMatrix4f & SetRotate(const GfMatrix3f &mx)
Sets the matrix to specify a rotation equivalent to mx, and clears the translation.
GfVec4f GetColumn(int i) const
Gets a column of the matrix as a Vec4.
Definition: matrix4f.h:191
GfVec4f GetRow(int i) const
Gets a row of the matrix as a Vec4.
Definition: matrix4f.h:186
GfVec3f TransformAffine(const GfVec3f &vec) const
Transforms the row vector vec by the matrix, returning the result.
Definition: matrix4f.h:701
GF_API GfRotation ExtractRotation() const
Returns the rotation corresponding to this matrix.
GF_API GfMatrix4f RemoveScaleShear() const
Returns the matrix with any scaling or shearing removed, leaving only the rotation and translation.
GF_API GfMatrix4f & SetDiagonal(float s)
Sets the matrix to s times the identity matrix.
A class template used by GfMatrixXX to store values.
Definition: matrixData.h:19
T * GetData()
Return a pointer to the start of all the data.
Definition: matrixData.h:33
Basic type: a quaternion, a complex number with a real coefficient and three imaginary coefficients,...
Definition: quatf.h:43
Basic type: 3-space rotation specification.
Definition: rotation.h:37
Basic type for a vector of 3 double components.
Definition: vec3d.h:46
Basic type for a vector of 3 float components.
Definition: vec3f.h:46
Basic type for a vector of 4 double components.
Definition: vec4d.h:46
Basic type for a vector of 4 float components.
Definition: vec4f.h:46
static size_t Combine(Args &&... args)
Produce a hash code by combining the hash codes of several objects.
Definition: hash.h:475
double GfDot(const GfDualQuatd &dq1, const GfDualQuatd &dq2)
Return the dot (inner) product of two dual quaternions.
Definition: dualQuatd.h:260
Assorted mathematical utility functions.
double GfAbs(double f)
Return abs(f).
Definition: math.h:222
GF_API std::ostream & operator<<(std::ostream &, const GfBBox3d &)
Output a GfBBox3d using the format [(range) matrix zeroArea].
#define GF_MIN_ORTHO_TOLERANCE
This constant is used to determine when a set of basis vectors is close to orthogonal.
Definition: limits.h:22
Utility functions for GfVec4f and GfVec4d as homogeneous vectors.
GfVec3f GfProject(const GfVec4f &v)
Projects homogeneous v into Euclidean space and returns the result as a Vec3f.
Definition: homogeneous.h:48
Defines useful mathematical limits.
GF_API bool GfIsClose(GfMatrix4f const &m1, GfMatrix4f const &m2, double tolerance)
Tests for equality within a given tolerance, returning true if the difference between each component ...
A metafunction with a static const bool member 'value' that is true for GfMatrix types,...
Definition: traits.h:25