MCPcopy Create free account
hub / github.com/davideberly/GeometricTools / SetAxes

Method SetAxes

GTE/Graphics/ViewVolume.cpp:45–88  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

43}
44
45void ViewVolume::SetAxes(Vector4<float> const& dVector,
46 Vector4<float> const& uVector, Vector4<float> const& rVector)
47{
48 mDVector = dVector;
49 mUVector = uVector;
50 mRVector = rVector;
51
52 float const epsilon = 0.01f;
53 float det = DotCross(mDVector, mUVector, mRVector);
54 if (std::fabs(1.0f - det) > epsilon)
55 {
56#if defined(GTE_VALIDATE_COORDINATE_FRAME_ONCE)
57 if (mValidateCoordinateFrame)
58 {
59 mValidateCoordinateFrame = false;
60
61 float lenD = Length(mDVector);
62 float lenU = Length(mUVector);
63 float lenR = Length(mRVector);
64 float dotDU = Dot(mDVector, mUVector);
65 float dotDR = Dot(mDVector, mRVector);
66 float dotUR = Dot(mUVector, mRVector);
67 if (std::fabs(1.0f - lenD) > epsilon
68 || std::fabs(1.0f - lenU) > epsilon
69 || std::fabs(1.0f - lenR) > epsilon
70 || std::fabs(dotDU) > epsilon
71 || std::fabs(dotDR) > epsilon
72 || std::fabs(dotUR) > epsilon)
73 {
74 LogError("Coordinate frame is not orthonormal.");
75 }
76 }
77#endif
78 // The input vectors do not appear to form an orthonormal set. Time
79 // to renormalize.
80 Vector4<float> v[3] = { mDVector, mUVector, mRVector };
81 Orthonormalize<4, float>(3, v);
82 mDVector = v[0];
83 mUVector = v[1];
84 mRVector = v[2];
85 }
86
87 OnFrameChange();
88}
89
90void ViewVolume::SetFrame(Vector4<float> const& position, Vector4<float> const& dVector,
91 Vector4<float> const& uVector, Vector4<float> const& rVector)

Callers 6

TurnRightMethod · 0.80
TurnLeftMethod · 0.80
LookUpMethod · 0.80
LookDownMethod · 0.80
RollClockwiseMethod · 0.80
RollCounterclockwiseMethod · 0.80

Calls 4

DotCrossFunction · 0.85
fabsFunction · 0.50
LengthFunction · 0.50
DotFunction · 0.50

Tested by

no test coverage detected