You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openmw-tes3mp/components/sceneutil/util.cpp

55 lines
1.5 KiB
C++

#include "util.hpp"
namespace SceneUtil
{
void transformBoundingSphere (const osg::Matrixf& matrix, osg::BoundingSphere& bsphere)
{
osg::BoundingSphere::vec_type xdash = bsphere._center;
xdash.x() += bsphere._radius;
xdash = xdash*matrix;
osg::BoundingSphere::vec_type ydash = bsphere._center;
ydash.y() += bsphere._radius;
ydash = ydash*matrix;
osg::BoundingSphere::vec_type zdash = bsphere._center;
zdash.z() += bsphere._radius;
zdash = zdash*matrix;
bsphere._center = bsphere._center*matrix;
xdash -= bsphere._center;
osg::BoundingSphere::value_type sqrlen_xdash = xdash.length2();
ydash -= bsphere._center;
osg::BoundingSphere::value_type sqrlen_ydash = ydash.length2();
zdash -= bsphere._center;
osg::BoundingSphere::value_type sqrlen_zdash = zdash.length2();
bsphere._radius = sqrlen_xdash;
if (bsphere._radius<sqrlen_ydash) bsphere._radius = sqrlen_ydash;
if (bsphere._radius<sqrlen_zdash) bsphere._radius = sqrlen_zdash;
bsphere._radius = sqrtf(bsphere._radius);
}
osg::Vec4f colourFromRGB(unsigned int clr)
{
osg::Vec4f colour(((clr >> 0) & 0xFF) / 255.0f,
((clr >> 8) & 0xFF) / 255.0f,
((clr >> 16) & 0xFF) / 255.0f, 1.f);
return colour;
}
osg::Vec4f colourFromRGBA(unsigned int clr)
{
osg::Vec4f colour(((clr >> 0) & 0xFF) / 255.0f,
((clr >> 8) & 0xFF) / 255.0f,
((clr >> 16) & 0xFF) / 255.0f,
((clr >> 24) & 0xFF) / 255.0f);
return colour;
}
}