54 inline QVector3D intersectWithLine(
const QVector3D &p0,
const QVector3D &p1)
const
56 QVector3D dir = p1 - p0;
57 QVector3D pointOnPlane = normal * (-d);
59 float distanceOfPoint = distance(pointOnPlane);
60 Q_ASSERT(qAbs(distanceOfPoint) < 0.0001f);
62 float numerator = QVector3D::dotProduct(pointOnPlane - p0, normal);
63 float denominator = QVector3D::dotProduct(dir, normal);
65 Q_ASSERT(qAbs(denominator) > .0001f);
66 float t = (numerator / denominator);
67 QVector3D retval = p0 + dir * t;
69 float retvalDistance = distance(retval);
70 Q_ASSERT(qAbs(retvalDistance) < .0001f);
75 static inline constexpr QVector3D corner(
const QSSGBounds3 &bounds, BoxEdgeFlag edge)
77 return QVector3D((edge & BoxEdgeID::xMax) ? bounds.maximum[0] : bounds.minimum[0],
78 (edge & BoxEdgeID::yMax) ? bounds.maximum[1] : bounds.minimum[1],
79 (edge & BoxEdgeID::zMax) ? bounds.maximum[2] : bounds.minimum[2]);
110 inline void calculateBBoxEdges()
112 mEdges.upperEdge = (normal[0] >= 0.0f ? BoxEdgeID::xMax : BoxEdgeID::None)
113 | (normal[1] >= 0.0f ? BoxEdgeID::yMax : BoxEdgeID::None)
114 | (normal[2] >= 0.0f ? BoxEdgeID::zMax : BoxEdgeID::None);
116 mEdges.lowerEdge = ((~(BoxEdgeFlag(mEdges.upperEdge))) & 7);