From dc6f989b13739180da807025bcd9ab567f5c6c8f Mon Sep 17 00:00:00 2001 From: vlj Date: Wed, 24 Sep 2014 00:24:53 +0200 Subject: [PATCH] Do not use matrix inversion for culling --- src/graphics/stkscenemanager.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/graphics/stkscenemanager.cpp b/src/graphics/stkscenemanager.cpp index 7b577b631..4798e92d4 100644 --- a/src/graphics/stkscenemanager.cpp +++ b/src/graphics/stkscenemanager.cpp @@ -172,16 +172,14 @@ bool isCulledPrecise(const scene::ICameraSceneNode *cam, const scene::ISceneNode if (!node->getAutomaticCulling()) return false; - scene::SViewFrustum frust = *cam->getViewFrustum(); - - //transform the frustum to the node's current absolute transformation - core::matrix4 invTrans(node->getAbsoluteTransformation(), core::matrix4::EM4CONST_INVERSE); - //invTrans.makeInverse(); - frust.transform(invTrans); + const core::matrix4 &trans = node->getAbsoluteTransformation(); core::vector3df edges[8]; node->getBoundingBox().getEdges(edges); + for (unsigned i = 0; i < 8; i++) + trans.transformVect(edges[i]); + scene::SViewFrustum frust = *cam->getViewFrustum(); for (s32 i = 0; i < scene::SViewFrustum::VF_PLANE_COUNT; ++i) if (isBoxInFrontOfPlane(frust.planes[i], edges)) return true;