56 inline QVector3D intersectWithLine(
const QVector3D &p0,
const QVector3D &p1)
const
58 QVector3D dir = p1 - p0;
59 QVector3D pointOnPlane = normal * (-d);
61 float distanceOfPoint = distance(pointOnPlane);
62 Q_ASSERT(qAbs(distanceOfPoint) < 0.0001f);
64 float numerator = QVector3D::dotProduct(pointOnPlane - p0, normal);
65 float denominator = QVector3D::dotProduct(dir, normal);
67 Q_ASSERT(qAbs(denominator) > .0001f);
68 float t = (numerator / denominator);
69 QVector3D retval = p0 + dir * t;
71 float retvalDistance = distance(retval);
72 Q_ASSERT(qAbs(retvalDistance) < .0001f);
77 static inline constexpr QVector3D corner(
const QSSGBounds3 &bounds, BoxEdgeFlag edge)
79 return QVector3D((edge & BoxEdgeID::xMax) ? bounds.maximum[0] : bounds.minimum[0],
80 (edge & BoxEdgeID::yMax) ? bounds.maximum[1] : bounds.minimum[1],
81 (edge & BoxEdgeID::zMax) ? bounds.maximum[2] : bounds.minimum[2]);
112 inline void calculateBBoxEdges()
114 mEdges.upperEdge = (normal[0] >= 0.0f ? BoxEdgeID::xMax : BoxEdgeID::None)
115 | (normal[1] >= 0.0f ? BoxEdgeID::yMax : BoxEdgeID::None)
116 | (normal[2] >= 0.0f ? BoxEdgeID::zMax : BoxEdgeID::None);
118 mEdges.lowerEdge = ((~(BoxEdgeFlag(mEdges.upperEdge))) & 7);