Added a ShadowTechnique::computeOrthogonalVector(const osg::Vec3& direction) const method for helping compute an appropriate

up vector to setViewMatrixAsLookAt(..) codes in osgShadow.  This will addresses previous issues that occured when look vectors
co-incided with the hard coded up vectors.
This commit is contained in:
Robert Osfield
2010-03-01 13:00:04 +00:00
parent 42a050e87c
commit ba3971bb45
4 changed files with 19 additions and 5 deletions

View File

@@ -14,6 +14,7 @@
#include <osgShadow/ShadowTechnique>
#include <osgShadow/ShadowedScene>
#include <osg/Notify>
#include <osg/io_utils>
using namespace osgShadow;
@@ -92,3 +93,15 @@ void ShadowTechnique::traverse(osg::NodeVisitor& nv)
_shadowedScene->osg::Group::traverse(nv);
}
}
osg::Vec3 ShadowTechnique::computeOrthogonalVector(const osg::Vec3& direction) const
{
float length = direction.length();
osg::Vec3 orthogonalVector = direction ^ osg::Vec3(0.0f, 1.0f, 0.0f);
if (orthogonalVector.normalize()<length*0.5f)
{
orthogonalVector = direction ^ osg::Vec3(0.0f, 0.0f, 1.0f);
orthogonalVector.normalize();
}
return orthogonalVector;
}