[osg-users] Polytope from view frustum

Trajce Nikolov NICK trajce.nikolov.nick at gmail.com
Wed Nov 2 07:10:38 PDT 2016


Thanks guys .. I did it per Robert's detailed description .. Took like
10mins and it works well ..

Thanks again!

Cheers!
Nick

On Wed, Nov 2, 2016 at 2:57 PM, Glenn Waldron <gwaldron at gmail.com> wrote:

> Also check out osgShadow::ConvexPolyhedron if you want to extract the
> corner verts or make geometry from it.
>
>
>
> Glenn Waldron
>
> On Wed, Nov 2, 2016 at 9:47 AM, Jeff Biggs <osg at simperative.com> wrote:
>
>>
>> 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-opens
>>> cenegraph.org
>>>
>>>
>>>
>>
>> --
>> Jeff Biggs
>>
>> _______________________________________________
>> osg-users mailing list
>> osg-users at lists.openscenegraph.org
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>


-- 
trajce nikolov nick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20161102/77540c6b/attachment-0003.htm>


More information about the osg-users mailing list