Loading...
Searching...
No Matches
matrix4d.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_MATRIX4D_H
12#define PXR_BASE_GF_MATRIX4D_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/vec4d.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/vec3d.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 GfMatrix4d> { static const bool value = true; };
36
37class GfMatrix4d;
38class GfMatrix4f;
39class GfQuatd;
40class GfRotation;
41class GfMatrix3d;
42
71{
72public:
73 typedef double ScalarType;
74
75 static const size_t numRows = 4;
76 static const size_t numColumns = 4;
77
80 GfMatrix4d() = default;
81
85 GfMatrix4d(double m00, double m01, double m02, double m03,
86 double m10, double m11, double m12, double m13,
87 double m20, double m21, double m22, double m23,
88 double m30, double m31, double m32, double m33) {
89 Set(m00, m01, m02, m03,
90 m10, m11, m12, m13,
91 m20, m21, m22, m23,
92 m30, m31, m32, m33);
93 }
94
97 GfMatrix4d(const double m[4][4]) {
98 Set(m);
99 }
100
103 explicit GfMatrix4d(double s) {
104 SetDiagonal(s);
105 }
106
109 explicit GfMatrix4d(const GfVec4d& v) {
110 SetDiagonal(v);
111 }
112
119 GF_API
120 explicit GfMatrix4d(const std::vector< std::vector<double> >& v);
121
128 GF_API
129 explicit GfMatrix4d(const std::vector< std::vector<float> >& v);
130
137 GF_API
138 explicit GfMatrix4d(const std::vector<double>& r0,
139 const std::vector<double>& r1,
140 const std::vector<double>& r2,
141 const std::vector<double>& r3);
142
149 GF_API
150 explicit GfMatrix4d(const std::vector<float>& r0,
151 const std::vector<float>& r1,
152 const std::vector<float>& r2,
153 const std::vector<float>& r3);
154
157 GF_API
158 GfMatrix4d(const GfRotation& rotate,
159 const GfVec3d& translate);
160
163 GF_API
164 GfMatrix4d(const GfMatrix3d& rotmx,
165 const GfVec3d& translate);
167 GF_API
168 explicit GfMatrix4d(const class GfMatrix4f& m);
169
171 void SetRow(int i, const GfVec4d & v) {
172 _mtx[i][0] = v[0];
173 _mtx[i][1] = v[1];
174 _mtx[i][2] = v[2];
175 _mtx[i][3] = v[3];
176 }
177
179 void SetColumn(int i, const GfVec4d & v) {
180 _mtx[0][i] = v[0];
181 _mtx[1][i] = v[1];
182 _mtx[2][i] = v[2];
183 _mtx[3][i] = v[3];
184 }
185
187 GfVec4d GetRow(int i) const {
188 return GfVec4d(_mtx[i][0], _mtx[i][1], _mtx[i][2], _mtx[i][3]);
189 }
190
192 GfVec4d GetColumn(int i) const {
193 return GfVec4d(_mtx[0][i], _mtx[1][i], _mtx[2][i], _mtx[3][i]);
194 }
195
199 GfMatrix4d& Set(double m00, double m01, double m02, double m03,
200 double m10, double m11, double m12, double m13,
201 double m20, double m21, double m22, double m23,
202 double m30, double m31, double m32, double m33) {
203 _mtx[0][0] = m00; _mtx[0][1] = m01; _mtx[0][2] = m02; _mtx[0][3] = m03;
204 _mtx[1][0] = m10; _mtx[1][1] = m11; _mtx[1][2] = m12; _mtx[1][3] = m13;
205 _mtx[2][0] = m20; _mtx[2][1] = m21; _mtx[2][2] = m22; _mtx[2][3] = m23;
206 _mtx[3][0] = m30; _mtx[3][1] = m31; _mtx[3][2] = m32; _mtx[3][3] = m33;
207 return *this;
208 }
209
212 GfMatrix4d& Set(const double m[4][4]) {
213 _mtx[0][0] = m[0][0];
214 _mtx[0][1] = m[0][1];
215 _mtx[0][2] = m[0][2];
216 _mtx[0][3] = m[0][3];
217 _mtx[1][0] = m[1][0];
218 _mtx[1][1] = m[1][1];
219 _mtx[1][2] = m[1][2];
220 _mtx[1][3] = m[1][3];
221 _mtx[2][0] = m[2][0];
222 _mtx[2][1] = m[2][1];
223 _mtx[2][2] = m[2][2];
224 _mtx[2][3] = m[2][3];
225 _mtx[3][0] = m[3][0];
226 _mtx[3][1] = m[3][1];
227 _mtx[3][2] = m[3][2];
228 _mtx[3][3] = m[3][3];
229 return *this;
230 }
231
234 return SetDiagonal(1);
235 }
236
239 return SetDiagonal(0);
240 }
241
243 GF_API
245
247 GF_API
249
252 GF_API
253 double* Get(double m[4][4]) const;
254
257 double* data() {
258 return _mtx.GetData();
259 }
260
263 const double* data() const {
264 return _mtx.GetData();
265 }
266
268 double* GetArray() {
269 return _mtx.GetData();
270 }
271
273 const double* GetArray() const {
274 return _mtx.GetData();
275 }
276
280 double* operator [](int i) { return _mtx[i]; }
281
285 const double* operator [](int i) const { return _mtx[i]; }
286
288 friend inline size_t hash_value(GfMatrix4d const &m) {
289 return TfHash::Combine(
290 m._mtx[0][0],
291 m._mtx[0][1],
292 m._mtx[0][2],
293 m._mtx[0][3],
294 m._mtx[1][0],
295 m._mtx[1][1],
296 m._mtx[1][2],
297 m._mtx[1][3],
298 m._mtx[2][0],
299 m._mtx[2][1],
300 m._mtx[2][2],
301 m._mtx[2][3],
302 m._mtx[3][0],
303 m._mtx[3][1],
304 m._mtx[3][2],
305 m._mtx[3][3]
306 );
307 }
308
311 GF_API
312 bool operator ==(const GfMatrix4d& m) const;
313
316 GF_API
317 bool operator ==(const GfMatrix4f& m) const;
318
321 bool operator !=(const GfMatrix4d& m) const {
322 return !(*this == m);
323 }
324
327 bool operator !=(const GfMatrix4f& m) const {
328 return !(*this == m);
329 }
330
332 GF_API
334
340 GF_API
341 GfMatrix4d GetInverse(double* det = NULL, double eps = 0) const;
342
344 GF_API
345 double GetDeterminant() const;
346
349 void SetRow3(int i, const GfVec3d & v) {
350 _mtx[i][0] = v[0];
351 _mtx[i][1] = v[1];
352 _mtx[i][2] = v[2];
353 }
354
356 GfVec3d GetRow3(int i) const {
357 return GfVec3d(_mtx[i][0], _mtx[i][1], _mtx[i][2]);
358 }
359
363 double GetDeterminant3() const {
364 return _GetDeterminant3(0, 1, 2, 0, 1, 2);
365 }
366
370 bool HasOrthogonalRows3() const {
371 // XXX Should add GfAreOrthogonal(v0, v1, v2) (which also
372 // GfRotation::Decompose() could use).
373 GfVec3d axis0(GetRow3(0)), axis1(GetRow3(1)), axis2(GetRow3(2));
374 return (GfAbs(GfDot(axis0, axis1)) < GF_MIN_ORTHO_TOLERANCE &&
375 GfAbs(GfDot(axis0, axis2)) < GF_MIN_ORTHO_TOLERANCE &&
376 GfAbs(GfDot(axis1, axis2)) < GF_MIN_ORTHO_TOLERANCE);
377 }
378
387 GF_API
388 bool Orthonormalize(bool issueWarning=true);
389
391 GF_API
392 GfMatrix4d GetOrthonormalized(bool issueWarning=true) const;
393
397 GF_API
398 double GetHandedness() const;
399
402 bool IsRightHanded() const {
403 return GetHandedness() == 1.0;
404 }
405
408 bool IsLeftHanded() const {
409 return GetHandedness() == -1.0;
410 }
411
413 GF_API
415
417 GF_API
419
421 friend GfMatrix4d operator *(const GfMatrix4d& m1, double d)
422 {
423 GfMatrix4d m = m1;
424 return m *= d;
425 }
426
428 // Returns the product of a matrix and a double.
429 friend GfMatrix4d operator *(double d, const GfMatrix4d& m)
430 {
431 return m * d;
432 }
433
435 GF_API
437
439 GF_API
441
443 GF_API
445
447 friend GfMatrix4d operator +(const GfMatrix4d& m1, const GfMatrix4d& m2)
448 {
449 GfMatrix4d tmp(m1);
450 tmp += m2;
451 return tmp;
452 }
453
455 friend GfMatrix4d operator -(const GfMatrix4d& m1, const GfMatrix4d& m2)
456 {
457 GfMatrix4d tmp(m1);
458 tmp -= m2;
459 return tmp;
460 }
461
463 friend GfMatrix4d operator *(const GfMatrix4d& m1, const GfMatrix4d& m2)
464 {
465 GfMatrix4d tmp(m1);
466 tmp *= m2;
467 return tmp;
468 }
469
471 friend GfMatrix4d operator /(const GfMatrix4d& m1, const GfMatrix4d& m2)
472 {
473 return(m1 * m2.GetInverse());
474 }
475
477 friend inline GfVec4d operator *(const GfMatrix4d& m, const GfVec4d& vec) {
478 return GfVec4d(vec[0] * m._mtx[0][0] + vec[1] * m._mtx[0][1] + vec[2] * m._mtx[0][2] + vec[3] * m._mtx[0][3],
479 vec[0] * m._mtx[1][0] + vec[1] * m._mtx[1][1] + vec[2] * m._mtx[1][2] + vec[3] * m._mtx[1][3],
480 vec[0] * m._mtx[2][0] + vec[1] * m._mtx[2][1] + vec[2] * m._mtx[2][2] + vec[3] * m._mtx[2][3],
481 vec[0] * m._mtx[3][0] + vec[1] * m._mtx[3][1] + vec[2] * m._mtx[3][2] + vec[3] * m._mtx[3][3]);
482 }
483
485 friend inline GfVec4d operator *(const GfVec4d &vec, const GfMatrix4d& m) {
486 return GfVec4d(vec[0] * m._mtx[0][0] + vec[1] * m._mtx[1][0] + vec[2] * m._mtx[2][0] + vec[3] * m._mtx[3][0],
487 vec[0] * m._mtx[0][1] + vec[1] * m._mtx[1][1] + vec[2] * m._mtx[2][1] + vec[3] * m._mtx[3][1],
488 vec[0] * m._mtx[0][2] + vec[1] * m._mtx[1][2] + vec[2] * m._mtx[2][2] + vec[3] * m._mtx[3][2],
489 vec[0] * m._mtx[0][3] + vec[1] * m._mtx[1][3] + vec[2] * m._mtx[2][3] + vec[3] * m._mtx[3][3]);
490 }
491
493 GF_API
494 GfMatrix4d& SetScale(double scaleFactor);
495
499 GF_API
501
504
507 GF_API
509
512 GF_API
514
517 GF_API
519
522 GF_API
524
527 GF_API
529
532 GF_API
534
537 GF_API
538 GfMatrix4d& SetScale(const GfVec3d &scaleFactors);
539
542 GF_API
544
547 GF_API
549
552 GF_API
554 const GfVec3d& translate);
555
558 GF_API
560 const GfVec3d& translate);
561
567 GF_API
568 GfMatrix4d& SetLookAt(const GfVec3d &eyePoint,
569 const GfVec3d &centerPoint,
570 const GfVec3d &upDirection);
571
577 GF_API
578 GfMatrix4d& SetLookAt(const GfVec3d &eyePoint,
579 const GfRotation &orientation);
580
595 GF_API
597 GfVec3d* t, GfMatrix4d* p,
598 double eps = 1e-10) const;
599
603 return GfVec3d(_mtx[3][0], _mtx[3][1], _mtx[3][2]);
604 }
605
611 GF_API
613
619 GF_API
621
627 GF_API
629 const GfVec3d &axis1,
630 const GfVec3d &axis2) const;
631
637 GF_API
639
643 GfVec3d Transform(const GfVec3d &vec) const {
644 return GfProject(GfVec4d(
645 vec[0] * _mtx[0][0] + vec[1] * _mtx[1][0] + vec[2] * _mtx[2][0] + _mtx[3][0],
646 vec[0] * _mtx[0][1] + vec[1] * _mtx[1][1] + vec[2] * _mtx[2][1] + _mtx[3][1],
647 vec[0] * _mtx[0][2] + vec[1] * _mtx[1][2] + vec[2] * _mtx[2][2] + _mtx[3][2],
648 vec[0] * _mtx[0][3] + vec[1] * _mtx[1][3] + vec[2] * _mtx[2][3] + _mtx[3][3]));
649 }
650
655 GfVec3d TransformDir(const GfVec3d &vec) const {
656 return GfVec3d(
657 vec[0] * _mtx[0][0] + vec[1] * _mtx[1][0] + vec[2] * _mtx[2][0],
658 vec[0] * _mtx[0][1] + vec[1] * _mtx[1][1] + vec[2] * _mtx[2][1],
659 vec[0] * _mtx[0][2] + vec[1] * _mtx[1][2] + vec[2] * _mtx[2][2]);
660 }
661
666 GfVec3d TransformAffine(const GfVec3d &vec) const {
667 return GfVec3d(
668 vec[0] * _mtx[0][0] + vec[1] * _mtx[1][0] + vec[2] * _mtx[2][0] + _mtx[3][0],
669 vec[0] * _mtx[0][1] + vec[1] * _mtx[1][1] + vec[2] * _mtx[2][1] + _mtx[3][1],
670 vec[0] * _mtx[0][2] + vec[1] * _mtx[1][2] + vec[2] * _mtx[2][2] + _mtx[3][2]);
671 }
673
674private:
677 GF_API
678 double _GetDeterminant3(size_t row1, size_t row2, size_t row3,
679 size_t col1, size_t col2, size_t col3) const;
680
682 void _Jacobi3(GfVec3d *eigenvalues, GfVec3d eigenvectors[3]) const;
683
686 void _SetRotateFromQuat(double r, const GfVec3d& i);
687
688
689private:
692
693 // Friend declarations
694 friend class GfMatrix4f;
695};
696
697
701GF_API
702bool GfIsClose(GfMatrix4d const &m1, GfMatrix4d const &m2, double tolerance);
703
706GF_API std::ostream& operator<<(std::ostream &, GfMatrix4d const &);
707
708PXR_NAMESPACE_CLOSE_SCOPE
709
710#endif // PXR_BASE_GF_MATRIX4D_H
Declares Gf types.
Stores a 3x3 matrix of double elements.
Definition: matrix3d.h:65
Stores a 4x4 matrix of double elements.
Definition: matrix4d.h:71
GF_API GfMatrix4d & operator*=(const GfMatrix4d &m)
Post-multiplies matrix m into this matrix.
GF_API GfMatrix4d GetTranspose() const
Returns the transpose of the matrix.
GF_API GfMatrix4d & SetTranslateOnly(const GfVec3d &t)
Sets matrix to specify a translation by the vector trans, without clearing the rotation.
bool HasOrthogonalRows3() const
Returns true, if the row vectors of the upper 3x3 matrix form an orthogonal basis.
Definition: matrix4d.h:370
GfVec3d Transform(const GfVec3d &vec) const
Transforms the row vector vec by the matrix, returning the result.
Definition: matrix4d.h:643
friend GfMatrix4d operator*(const GfMatrix4d &m1, double d)
Returns the product of a matrix and a double.
Definition: matrix4d.h:421
GF_API GfMatrix4d & operator-=(const GfMatrix4d &m)
Subtracts matrix m from this matrix.
GF_API GfMatrix4d & SetRotate(const GfMatrix3d &mx)
Sets the matrix to specify a rotation equivalent to mx, and clears the translation.
friend GfMatrix4d operator/(const GfMatrix4d &m1, const GfMatrix4d &m2)
Divides matrix m1 by m2 (that is, m1 * inv(m2)).
Definition: matrix4d.h:471
void SetRow3(int i, const GfVec3d &v)
Sets a row of the matrix from a Vec3.
Definition: matrix4d.h:349
GF_API GfMatrix4d & SetDiagonal(double s)
Sets the matrix to s times the identity matrix.
const double * data() const
Returns const raw access to components of matrix as an array of double values.
Definition: matrix4d.h:263
GfMatrix4d(double m00, double m01, double m02, double m03, double m10, double m11, double m12, double m13, double m20, double m21, double m22, double m23, double m30, double m31, double m32, double m33)
Constructor.
Definition: matrix4d.h:85
GF_API GfMatrix4d & SetRotateOnly(const GfMatrix3d &mx)
Sets the matrix to specify a rotation equivalent to mx, without clearing the translation.
GF_API GfMatrix4d & SetScale(double scaleFactor)
Sets matrix to specify a uniform scaling by scaleFactor.
GF_API GfMatrix3d ExtractRotationMatrix() const
Returns the rotation corresponding to this matrix.
friend size_t hash_value(GfMatrix4d const &m)
Hash.
Definition: matrix4d.h:288
GfVec3d TransformDir(const GfVec3d &vec) const
Transforms row vector vec by the matrix, returning the result.
Definition: matrix4d.h:655
GfMatrix4d()=default
GfMatrix4d value-initializes to zero and performs no default initialization, like float or double.
GF_API GfMatrix4d & SetRotate(const GfRotation &rot)
Sets the matrix to specify a rotation equivalent to rot, and clears the translation.
GF_API GfMatrix4d(const GfRotation &rotate, const GfVec3d &translate)
Constructor.
GfVec3d GetRow3(int i) const
Gets a row of the matrix as a Vec3.
Definition: matrix4d.h:356
GfMatrix4d & Set(const double m[4][4])
Sets the matrix from a 4x4 array of double values, specified in row-major order.
Definition: matrix4d.h:212
GfVec3d ExtractTranslation() const
Returns the translation part of the matrix, defined as the first three elements of the last row.
Definition: matrix4d.h:602
GF_API GfMatrix4d & SetDiagonal(const GfVec4d &)
Sets the matrix to have diagonal (v[0], v[1], v[2], v[3]).
GF_API GfMatrix4d(const std::vector< float > &r0, const std::vector< float > &r1, const std::vector< float > &r2, const std::vector< float > &r3)
Constructor.
GF_API GfMatrix4d RemoveScaleShear() const
Returns the matrix with any scaling or shearing removed, leaving only the rotation and translation.
GfVec4d GetColumn(int i) const
Gets a column of the matrix as a Vec4.
Definition: matrix4d.h:192
GF_API GfMatrix4d & SetRotateOnly(const GfQuatd &rot)
Sets the matrix to specify a rotation equivalent to rot, without clearing the translation.
GF_API double GetDeterminant() const
Returns the determinant of the matrix.
void SetColumn(int i, const GfVec4d &v)
Sets a column of the matrix from a Vec4.
Definition: matrix4d.h:179
GF_API GfMatrix4d & SetScale(const GfVec3d &scaleFactors)
Sets the matrix to specify a nonuniform scaling in x, y, and z by the factors in vector scaleFactors.
double * operator[](int i)
Accesses an indexed row i of the matrix as an array of 4 double values so that standard indexing (suc...
Definition: matrix4d.h:280
GfMatrix4d & SetIdentity()
Sets the matrix to the identity matrix.
Definition: matrix4d.h:233
bool operator!=(const GfMatrix4d &m) const
Tests for element-wise matrix inequality.
Definition: matrix4d.h:321
GF_API GfMatrix4d(const std::vector< double > &r0, const std::vector< double > &r1, const std::vector< double > &r2, const std::vector< double > &r3)
Constructor.
GF_API GfMatrix4d(const std::vector< std::vector< double > > &v)
Constructor.
GfMatrix4d & Set(double m00, double m01, double m02, double m03, double m10, double m11, double m12, double m13, double m20, double m21, double m22, double m23, double m30, double m31, double m32, double m33)
Sets the matrix from 16 independent double values, specified in row-major order.
Definition: matrix4d.h:199
GF_API bool operator==(const GfMatrix4d &m) const
Tests for element-wise matrix equality.
GF_API double GetHandedness() const
Returns the sign of the determinant of the upper 3x3 matrix, i.e.
GF_API GfMatrix4d & SetTranslate(const GfVec3d &trans)
Sets matrix to specify a translation by the vector trans, and clears the rotation.
double * GetArray()
Returns vector components as an array of double values.
Definition: matrix4d.h:268
friend GfMatrix4d operator+(const GfMatrix4d &m1, const GfMatrix4d &m2)
Adds matrix m2 to m1.
Definition: matrix4d.h:447
GF_API double * Get(double m[4][4]) const
Fills a 4x4 array of double values with the values in the matrix, specified in row-major order.
GF_API GfMatrix4d & operator+=(const GfMatrix4d &m)
Adds matrix m to this matrix.
double * data()
Returns raw access to components of matrix as an array of double values.
Definition: matrix4d.h:257
void SetRow(int i, const GfVec4d &v)
Sets a row of the matrix from a Vec4.
Definition: matrix4d.h:171
GfMatrix4d(const double m[4][4])
Constructor.
Definition: matrix4d.h:97
GF_API GfMatrix4d(const class GfMatrix4f &m)
This explicit constructor converts a "float" matrix to a "double" matrix.
GF_API GfMatrix4d GetInverse(double *det=NULL, double eps=0) const
Returns the inverse of the matrix, or FLT_MAX * SetIdentity() if the matrix is singular.
GfMatrix4d(const GfVec4d &v)
Constructor.
Definition: matrix4d.h:109
GfVec4d GetRow(int i) const
Gets a row of the matrix as a Vec4.
Definition: matrix4d.h:187
GF_API GfMatrix4d(const std::vector< std::vector< float > > &v)
Constructor.
GfMatrix4d(double s)
Constructor.
Definition: matrix4d.h:103
GfVec3d TransformAffine(const GfVec3d &vec) const
Transforms the row vector vec by the matrix, returning the result.
Definition: matrix4d.h:666
GF_API bool Orthonormalize(bool issueWarning=true)
Makes the matrix orthonormal in place.
GF_API GfMatrix4d & SetRotate(const GfQuatd &rot)
Sets the matrix to specify a rotation equivalent to rot, and clears the translation.
GfMatrix4d & SetZero()
Sets the matrix to zero.
Definition: matrix4d.h:238
bool IsLeftHanded() const
Returns true if the vectors in the upper 3x3 matrix form a left-handed coordinate system.
Definition: matrix4d.h:408
GF_API GfMatrix4d GetOrthonormalized(bool issueWarning=true) const
Returns an orthonormalized copy of the matrix.
GF_API GfQuatd ExtractRotationQuat() const
Return the rotation corresponding to this matrix as a quaternion.
double GetDeterminant3() const
Returns the determinant of the upper 3x3 matrix.
Definition: matrix4d.h:363
GF_API friend GfMatrix4d operator-(const GfMatrix4d &m)
Returns the unary negation of matrix m.
GF_API GfVec3d DecomposeRotation(const GfVec3d &axis0, const GfVec3d &axis1, const GfVec3d &axis2) const
Decompose the rotation corresponding to this matrix about 3 orthogonal axes.
bool IsRightHanded() const
Returns true if the vectors in the upper 3x3 matrix form a right-handed coordinate system.
Definition: matrix4d.h:402
GF_API GfMatrix4d & SetTransform(const GfRotation &rotate, const GfVec3d &translate)
Sets matrix to specify a rotation by rotate and a translation by translate.
GF_API GfMatrix4d & SetRotateOnly(const GfRotation &rot)
Sets the matrix to specify a rotation equivalent to rot, without clearing the translation.
GF_API GfMatrix4d & SetTransform(const GfMatrix3d &rotmx, const GfVec3d &translate)
Sets matrix to specify a rotation by rotmx and a translation by translate.
GF_API bool Factor(GfMatrix4d *r, GfVec3d *s, GfMatrix4d *u, GfVec3d *t, GfMatrix4d *p, double eps=1e-10) const
Factors the matrix into 5 components:
GF_API GfMatrix4d(const GfMatrix3d &rotmx, const GfVec3d &translate)
Constructor.
GF_API GfMatrix4d & SetLookAt(const GfVec3d &eyePoint, const GfRotation &orientation)
Sets the matrix to specify a viewing matrix from a world-space eyePoint and a world-space rotation th...
GF_API GfRotation ExtractRotation() const
Returns the rotation corresponding to this matrix.
GF_API GfMatrix4d & SetLookAt(const GfVec3d &eyePoint, const GfVec3d &centerPoint, const GfVec3d &upDirection)
Sets the matrix to specify a viewing matrix from parameters similar to those used by gluLookAt(3G).
const double * GetArray() const
Returns vector components as a const array of double values.
Definition: matrix4d.h:273
Stores a 4x4 matrix of float elements.
Definition: matrix4f.h:71
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: quatd.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 4 double components.
Definition: vec4d.h:46
static size_t Combine(Args &&... args)
Produce a hash code by combining the hash codes of several objects.
Definition: hash.h:487
double GfDot(const GfDualQuatd &dq1, const GfDualQuatd &dq2)
Return the dot (inner) product of two dual quaternions.
Definition: dualQuatd.h:261
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(GfMatrix4d const &m1, GfMatrix4d 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