by adding a ComputeTransformCallback to osg::Transform, and have now removed the recently added AutoTransform since it is nolonger required. Have also updated CullVisitor to account for the new ways for tracking transformation matrices in the scene.
80 lines
1.7 KiB
C++
80 lines
1.7 KiB
C++
#include <osg/Transform>
|
|
|
|
using namespace osg;
|
|
|
|
Transform::Transform()
|
|
{
|
|
_type = DYNAMIC;
|
|
_mode = MODEL;
|
|
|
|
_matrix = new Matrix;
|
|
}
|
|
|
|
Transform::Transform(const Transform& transform,const CopyOp& copyop):
|
|
Group(transform,copyop),
|
|
_type(transform._type),
|
|
_mode(transform._mode),
|
|
_computeTransformCallback(_computeTransformCallback),
|
|
_matrix(new Matrix(*transform._matrix))
|
|
{
|
|
}
|
|
|
|
Transform::Transform(const Matrix& mat )
|
|
{
|
|
_type = DYNAMIC;
|
|
_mode = MODEL;
|
|
|
|
_matrix = new Matrix(mat);
|
|
}
|
|
|
|
|
|
Transform::~Transform()
|
|
{
|
|
}
|
|
|
|
const bool Transform::computeBound() const
|
|
{
|
|
if (!Group::computeBound()) return false;
|
|
|
|
// note, NULL pointer for NodeVisitor, so compute's need
|
|
// to handle this case gracefully, normally this should not be a problem.
|
|
Matrix l2w;
|
|
if (getLocalToWorldMatrix(l2w,NULL))
|
|
{
|
|
|
|
Vec3 xdash = _bsphere._center;
|
|
xdash.x() += _bsphere._radius;
|
|
xdash = xdash*l2w;
|
|
|
|
Vec3 ydash = _bsphere._center;
|
|
ydash.y() += _bsphere._radius;
|
|
ydash = ydash*l2w;
|
|
|
|
Vec3 zdash = _bsphere._center;
|
|
zdash.y() += _bsphere._radius;
|
|
zdash = zdash*l2w;
|
|
|
|
_bsphere._center = _bsphere._center*l2w;
|
|
|
|
xdash -= _bsphere._center;
|
|
float len_xdash = xdash.length();
|
|
|
|
ydash -= _bsphere._center;
|
|
float len_ydash = ydash.length();
|
|
|
|
zdash -= _bsphere._center;
|
|
float len_zdash = zdash.length();
|
|
|
|
_bsphere._radius = len_xdash;
|
|
if (_bsphere._radius<len_ydash) _bsphere._radius = len_ydash;
|
|
if (_bsphere._radius<len_zdash) _bsphere._radius = len_zdash;
|
|
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
_bsphere.init();
|
|
return false;
|
|
}
|
|
}
|