X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fscene.cpp;h=3933599ba5c63f13307d1c755ba0cd9323842a1b;hb=5c5d094255ae5b0a07f99392a5a099ad9c8e8e38;hp=1625ca32c7c74052cdec47cdf10f741d26115f12;hpb=d16abe533233dc15810fe6bdf4a873d36eefc5dc;p=libs%2Fgl.git diff --git a/source/scene.cpp b/source/scene.cpp index 1625ca32..3933599b 100644 --- a/source/scene.cpp +++ b/source/scene.cpp @@ -15,12 +15,6 @@ Scene::~Scene() delete *i; } -void Scene::render(const Tag &tag) const -{ - Renderer renderer(0); - render(renderer, tag); -} - bool Scene::setup_frustum(const Renderer &renderer) const { const Camera *camera = renderer.get_camera(); @@ -66,11 +60,15 @@ bool Scene::frustum_cull(const Renderable &renderable) const return false; Vector4 center = culling_matrix*(*matrix*compose(bsphere->get_center(), 1.0f)); - float radius = bsphere->get_radius(); + Vector4 x_axis = *matrix*Vector4(bsphere->get_radius(), 0.0f, 0.0f, 0.0f); + float radius_sq = inner_product(x_axis, x_axis); for(unsigned i=0; i<6; ++i) - if(inner_product(center, frustum_edges[i])>radius) + { + float distance = inner_product(center, frustum_edges[i]); + if(distance>0 && distance*distance>radius_sq) return true; + } return false; }