void Frustum::setupFromMatrix(const kmMat4 &view, const kmMat4 &projection) { kmMat4 mvp; kmMat4Multiply(&mvp, &projection, &view); kmMat4ExtractPlane(&_frustumPlanes[FrustumPlane::FRUSTUM_NEAR], &mvp, KM_PLANE_NEAR); kmMat4ExtractPlane(&_frustumPlanes[FrustumPlane::FRUSTUM_FAR], &mvp, KM_PLANE_FAR); kmMat4ExtractPlane(&_frustumPlanes[FrustumPlane::FRUSTUM_LEFT], &mvp, KM_PLANE_LEFT); kmMat4ExtractPlane(&_frustumPlanes[FrustumPlane::FRUSTUM_RIGHT], &mvp, KM_PLANE_RIGHT); kmMat4ExtractPlane(&_frustumPlanes[FrustumPlane::FRUSTUM_BOTTOM], &mvp, KM_PLANE_BOTTOM); kmMat4ExtractPlane(&_frustumPlanes[FrustumPlane::FRUSTUM_TOP], &mvp, KM_PLANE_TOP); }
void lite3d_frustum_compute(struct lite3d_frustum *frustum, const struct kmMat4 *clip) { SDL_assert(frustum); SDL_assert(clip); /* rigth plane */ kmMat4ExtractPlane(&frustum->clipPlains[0], clip, KM_PLANE_RIGHT); /* left plane */ kmMat4ExtractPlane(&frustum->clipPlains[1], clip, KM_PLANE_LEFT); /* bottom plane */ kmMat4ExtractPlane(&frustum->clipPlains[2], clip, KM_PLANE_BOTTOM); /* top plane */ kmMat4ExtractPlane(&frustum->clipPlains[3], clip, KM_PLANE_TOP); /* rear plane */ kmMat4ExtractPlane(&frustum->clipPlains[4], clip, KM_PLANE_FAR); /* front plane */ kmMat4ExtractPlane(&frustum->clipPlains[5], clip, KM_PLANE_NEAR); }