1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
#include "box.hpp"
namespace LuaUtil
{
Box::Box(const osg::Vec3f& center, const osg::Vec3f& halfSize, const osg::Quat& rotation)
: mCenter(center)
, mHalfSize(halfSize)
, mRotation(rotation)
{
}
Box::Box(const osg::Matrix& transform)
{
osg::Quat _;
transform.decompose(mCenter, mRotation, mHalfSize, _);
}
std::array<osg::Vec3f, 8> Box::vertices() const
{
return {
mCenter + mRotation * osg::Vec3f(-mHalfSize.x(), -mHalfSize.y(), -mHalfSize.z()),
mCenter + mRotation * osg::Vec3f(mHalfSize.x(), -mHalfSize.y(), -mHalfSize.z()),
mCenter + mRotation * osg::Vec3f(mHalfSize.x(), mHalfSize.y(), -mHalfSize.z()),
mCenter + mRotation * osg::Vec3f(-mHalfSize.x(), mHalfSize.y(), -mHalfSize.z()),
mCenter + mRotation * osg::Vec3f(-mHalfSize.x(), -mHalfSize.y(), mHalfSize.z()),
mCenter + mRotation * osg::Vec3f(mHalfSize.x(), -mHalfSize.y(), mHalfSize.z()),
mCenter + mRotation * osg::Vec3f(mHalfSize.x(), mHalfSize.y(), mHalfSize.z()),
mCenter + mRotation * osg::Vec3f(-mHalfSize.x(), mHalfSize.y(), mHalfSize.z()),
};
}
osg::Matrix Box::asTransform() const
{
osg::Matrix transform;
transform.preMultTranslate(mCenter);
transform.preMultRotate(mRotation);
transform.preMultScale(mHalfSize);
return transform;
}
bool Box::operator==(const Box& other) const
{
return mCenter == other.mCenter && mHalfSize == other.mHalfSize && mRotation == other.mRotation;
}
}
|