13QSSGClippingFrustum::QSSGClippingFrustum(
const QMatrix4x4 &modelviewprojection,
const QSSGClipPlane &nearPlane)
15 const float *modelviewProjection = modelviewprojection.data();
20#define M(_x, _y) modelviewProjection[(4
* (_y)) + (_x)]
22 mPlanes[0].normal = {
M(3, 0) +
M(0, 0),
M(3, 1) +
M(0, 1),
M(3, 2) +
M(0, 2) };
23 mPlanes[0].d = (
M(3, 3) +
M(0, 3)) / QSSGUtils::vec3::normalize(mPlanes[0].normal);
26 mPlanes[1].normal = {
M(3, 0) -
M(0, 0),
M(3, 1) -
M(0, 1),
M(3, 2) -
M(0, 2) };
27 mPlanes[1].d = (
M(3, 3) -
M(0, 3)) / QSSGUtils::vec3::normalize(mPlanes[1].normal);
30 mPlanes[2].normal = { (
M(3, 0) -
M(2, 0)),
M(3, 1) -
M(2, 1),
M(3, 2) -
M(2, 2) };
31 mPlanes[2].d = (
M(3, 3) -
M(2, 3)) / QSSGUtils::vec3::normalize(mPlanes[2].normal);
34 mPlanes[3].normal = {
M(3, 0) +
M(1, 0),
M(3, 1) +
M(1, 1),
M(3, 2) +
M(1, 2) };
35 mPlanes[3].d = (
M(3, 3) +
M(1, 3)) / QSSGUtils::vec3::normalize(mPlanes[3].normal);
38 mPlanes[4].normal = {
M(3, 0) -
M(1, 0),
M(3, 1) -
M(1, 1),
M(3, 2) -
M(1, 2) };
39 mPlanes[4].d = (
M(3, 3) -
M(1, 3)) / QSSGUtils::vec3::normalize(mPlanes[4].normal);
41 mPlanes[5] = nearPlane;
44 for (quint32 idx = 0; idx < 6; ++idx)
45 mPlanes[idx].calculateBBoxEdges();