[osg-users] Polytope from view frustum

Jeff Biggs osg at simperative.com
Wed Nov 2 06:47:58 PDT 2016

try this...

osg::Polytope GetViewPolytope(
     const osg::Matrix &p,
     const osg::Matrix &v,
     const osg::Matrix &m)
     osg::Polytope clipspace;
     clipspace.setToUnitFrustum(true, true);

     // composite matrix
     osg::Matrixd mvp = m * v * p;

     // transform from clip space to local coords
     osg::Polytope local;
     local.setAndTransformProvidingInverse(clipspace, mvp);

     return local;

// --- Sample use case ---

osg::Camera *cam;
osg::Matrixd entityBodyMatrix;

osg::Polytope viewPolytope = GetViewPolytope(
     cam->getProjectionMatrix(), cam->getViewMatrix(), entityBodyMatrix);

const osg::BoundingSphere boundSphere;

if (viewPolytope.contains(boundSphere) {
     // sphere is inside of view


On 11/2/16 3:43 AM, Robert Osfield wrote:
> On 1 November 2016 at 21:45, Trajce Nikolov NICK
> <trajce.nikolov.nick at gmail.com> wrote:
>> Hi Community,
>> anyone knowing how to achieve this and with will to share?
>> Thanks a bunch as always !!
> Have a look at the API's...
> First one to look at is osg::Polytope, create one of these with a unit
> frustum.  This will be in clip space.
> Next step transform this Polytope by the projection matrix using the
> transformProvidingInverse() method (to transform a plane you multiple
> it by the inverse of that matrix), so in our case the projection
> matrix transform from eye space into clip space which is the inverse
> of the transform we intend, but thanks to the way that planes are
> transformed we can just use the projection matrix directly as long as
> we use the transformProvidingInverse().  See the src/osg/CullStack.cpp
> to see this in action.
> Then transform into object coordinates using the same method by
> providing the view and model matrices.
> Robert.
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Jeff Biggs

More information about the osg-users mailing list