| 4 | namespace TEN::Renderer |
| 5 | { |
| 6 | void Frustum::Update(const Matrix& view, const Matrix& projection) |
| 7 | { |
| 8 | std::array<float, 16> clip; |
| 9 | clip[0] = view._11 * projection._11 + view._12 * projection._21 + view._13 * projection._31 + view._14 * projection._41; |
| 10 | clip[1] = view._11 * projection._12 + view._12 * projection._22 + view._13 * projection._32 + view._14 * projection._42; |
| 11 | clip[2] = view._11 * projection._13 + view._12 * projection._23 + view._13 * projection._33 + view._14 * projection._43; |
| 12 | clip[3] = view._11 * projection._14 + view._12 * projection._24 + view._13 * projection._34 + view._14 * projection._44; |
| 13 | |
| 14 | clip[4] = view._21 * projection._11 + view._22 * projection._21 + view._23 * projection._31 + view._24 * projection._41; |
| 15 | clip[5] = view._21 * projection._12 + view._22 * projection._22 + view._23 * projection._32 + view._24 * projection._42; |
| 16 | clip[6] = view._21 * projection._13 + view._22 * projection._23 + view._23 * projection._33 + view._24 * projection._43; |
| 17 | clip[7] = view._21 * projection._14 + view._22 * projection._24 + view._23 * projection._34 + view._24 * projection._44; |
| 18 | |
| 19 | clip[8] = view._31 * projection._11 + view._32 * projection._21 + view._33 * projection._31 + view._34 * projection._41; |
| 20 | clip[9] = view._31 * projection._12 + view._32 * projection._22 + view._33 * projection._32 + view._34 * projection._42; |
| 21 | clip[10] = view._31 * projection._13 + view._32 * projection._23 + view._33 * projection._33 + view._34 * projection._43; |
| 22 | clip[11] = view._31 * projection._14 + view._32 * projection._24 + view._33 * projection._34 + view._34 * projection._44; |
| 23 | |
| 24 | clip[12] = view._41 * projection._11 + view._42 * projection._21 + view._43 * projection._31 + view._44 * projection._41; |
| 25 | clip[13] = view._41 * projection._12 + view._42 * projection._22 + view._43 * projection._32 + view._44 * projection._42; |
| 26 | clip[14] = view._41 * projection._13 + view._42 * projection._23 + view._43 * projection._33 + view._44 * projection._43; |
| 27 | clip[15] = view._41 * projection._14 + view._42 * projection._24 + view._43 * projection._34 + view._44 * projection._44; |
| 28 | |
| 29 | // This will extract the LEFT side of the frustum. |
| 30 | frustum[1][0] = clip[3] - clip[0]; |
| 31 | frustum[1][1] = clip[7] - clip[4]; |
| 32 | frustum[1][2] = clip[11] - clip[8]; |
| 33 | frustum[1][3] = clip[15] - clip[12]; |
| 34 | NormalizePlane(1); |
| 35 | |
| 36 | // This will extract the RIGHT side of the frustum. |
| 37 | frustum[0][0] = clip[3] + clip[0]; |
| 38 | frustum[0][1] = clip[7] + clip[4]; |
| 39 | frustum[0][2] = clip[11] + clip[8]; |
| 40 | frustum[0][3] = clip[15] + clip[12]; |
| 41 | NormalizePlane(0); |
| 42 | |
| 43 | // This will extract the BOTTOM side of the frustum. |
| 44 | frustum[2][0] = clip[3] + clip[1]; |
| 45 | frustum[2][1] = clip[7] + clip[5]; |
| 46 | frustum[2][2] = clip[11] + clip[9]; |
| 47 | frustum[2][3] = clip[15] + clip[13]; |
| 48 | NormalizePlane(2); |
| 49 | |
| 50 | // This will extract the TOP side of the frustum. |
| 51 | frustum[3][0] = clip[3] - clip[1]; |
| 52 | frustum[3][1] = clip[7] - clip[5]; |
| 53 | frustum[3][2] = clip[11] - clip[9]; |
| 54 | frustum[3][3] = clip[15] - clip[13]; |
| 55 | NormalizePlane(3); |
| 56 | |
| 57 | // This will extract the BACK side of the frustum. |
| 58 | frustum[4][0] = clip[3] + clip[2]; |
| 59 | frustum[4][1] = clip[7] + clip[6]; |
| 60 | frustum[4][2] = clip[11] + clip[10]; |
| 61 | frustum[4][3] = clip[15] + clip[14]; |
| 62 | NormalizePlane(4); |
| 63 |
no outgoing calls
no test coverage detected