[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
}
jeff
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