示例#1
0
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);
}
示例#2
0
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);
}