33 #ifndef OPENVDB_MATH_LEGACYFRUSTUM_HAS_BEEN_INCLUDED
34 #define OPENVDB_MATH_LEGACYFRUSTUM_HAS_BEEN_INCLUDED
65 Mat4d tmpW2C, tmpC2S, tmpS2C, tmpWorldToLocal;
66 Mat4d tmpS2U, tmpXYLocalToUnit, tmpZLocalToUnit;
73 is.
read(reinterpret_cast<char*>(&tmpW2C),
75 is.read(reinterpret_cast<char*>(&mC2W),
77 is.read(reinterpret_cast<char*>(&tmpC2S),
79 is.read(reinterpret_cast<char*>(&tmpS2C),
81 is.read(reinterpret_cast<char*>(&tmpWorldToLocal),
83 is.read(reinterpret_cast<char*>(&mLocalToWorld),
86 is.read(reinterpret_cast<char*>(&tmpWindow[0]),
sizeof(
Real));
87 is.read(reinterpret_cast<char*>(&tmpWindow[1]),
sizeof(
Real));
88 is.read(reinterpret_cast<char*>(&tmpWindow[2]),
sizeof(
Real));
89 is.read(reinterpret_cast<char*>(&tmpWindow[3]),
sizeof(
Real));
90 is.read(reinterpret_cast<char*>(&tmpWindow[4]),
sizeof(
Real));
91 is.read(reinterpret_cast<char*>(&tmpWindow[5]),
sizeof(
Real));
93 is.read(reinterpret_cast<char*>(&tmpPadding),
sizeof(
Real));
95 is.read(reinterpret_cast<char*>(&tmpS2U),
97 is.read(reinterpret_cast<char*>(&mXYUnitToLocal),
99 is.read(reinterpret_cast<char*>(&tmpXYLocalToUnit),
101 is.read(reinterpret_cast<char*>(&mZUnitToLocal),
103 is.read(reinterpret_cast<char*>(&tmpZLocalToUnit),
107 mNearPlane = tmpWindow[4];
108 mFarPlane = tmpWindow[5];
112 mFrNearOrigin = unitToLocalFrustum(
Vec3R(0,0,0));
113 mFrFarOrigin = unitToLocalFrustum(
Vec3R(0,0,1));
115 Vec3d frNearXTip = unitToLocalFrustum(
Vec3R(1,0,0));
116 Vec3d frNearYTip = unitToLocalFrustum(
Vec3R(0,1,0));
117 mFrNearXBasis = frNearXTip - mFrNearOrigin;
118 mFrNearYBasis = frNearYTip - mFrNearOrigin;
120 Vec3R frFarXTip = unitToLocalFrustum(
Vec3R(1,0,1));
121 Vec3R frFarYTip = unitToLocalFrustum(
Vec3R(0,1,1));
122 mFrFarXBasis = frFarXTip - mFrFarOrigin;
123 mFrFarYBasis = frFarYTip - mFrFarOrigin;
130 double getDepth()
const {
return (mFarPlane - mNearPlane); }
133 return getNearPlaneWidth() / getFarPlaneWidth();
137 double nearPlaneWidth = (unitToWorld(
Vec3d(0,0,0)) - unitToWorld(
Vec3d(1,0,0))).length();
138 return nearPlaneWidth;
142 double farPlaneWidth = (unitToWorld(
Vec3d(0,0,1)) - unitToWorld(
Vec3d(1,0,1))).length();
143 return farPlaneWidth;
161 Vec3d nearLS = ( U[0] * mFrNearXBasis ) + ( U[1] * mFrNearYBasis ) + mFrNearOrigin;
162 Vec3d farLS = ( U[0] * mFrFarXBasis ) + ( U[1] * mFrFarYBasis ) + mFrFarOrigin;
165 return U[2] * farLS + ( 1.0 - U[2] ) * nearLS;
168 Vec3d unitToLocalFrustum(
const Vec3d& u)
const {
169 Vec3d fzu = mZUnitToLocal.transformH(u);
172 return mXYUnitToLocal.transformH(fu);
176 Mat4d mC2W, mLocalToWorld, mXYUnitToLocal, mZUnitToLocal;
178 Vec3d mFrNearXBasis, mFrNearYBasis, mFrFarXBasis, mFrFarYBasis;
179 Vec3d mFrNearOrigin, mFrFarOrigin;
180 double mNearPlane, mFarPlane;
188 #endif // OPENVDB_MATH_LEGACYFRUSTUM_HAS_BEEN_INCLUDED