Пример #1
0
        //! Transforms Box3 by matrix, enlarging Box3 to contain result.
        void transform(const Matrix4<Type> & m)
        {
            // a transformed empty box is still empty
            if(isEmpty()) return;

            Vec3<Type> corners[8];
            corners[0]    = m_min;
            corners[1][0] = m_min[0]; corners[1][1] = m_max[1]; corners[1][2] = m_min[2];
            corners[2][0] = m_max[0]; corners[2][1] = m_max[1]; corners[2][2] = m_min[2];
            corners[3][0] = m_max[0]; corners[3][1] = m_min[1]; corners[3][2] = m_min[2];
            corners[4]    = m_max;
            corners[5][0] = m_min[0]; corners[5][1] = m_max[1]; corners[5][2] = m_max[2];
            corners[6][0] = m_min[0]; corners[6][1] = m_min[1]; corners[6][2] = m_max[2];
            corners[7][0] = m_max[0]; corners[7][1] = m_min[1]; corners[7][2] = m_max[2];

            Box3<Type> newbox;
            for(int i = 0; i < 8; ++i){
                m.multVecMatrix(corners[i], corners[i]);
                newbox.extendBy(corners[i]);
            }

            setBounds(newbox.m_min, newbox.m_max);
        }