void PlanePrimitiveShape::Transform(const GfxTL::MatrixXX< 3, 3, float > &rot, const GfxTL::Vector3Df &trans) { GfxTL::Vector3Df transNormal = rot * GfxTL::Vector3Df( m_plane.getNormal()); GfxTL::Vector3Df transOrigin = rot * GfxTL::Vector3Df( m_plane.getPosition()) + trans; m_plane = Plane(Vec3f(transOrigin.Data()), Vec3f(transNormal.Data())); m_hcs[0] = rot * m_hcs[0]; m_hcs[1] = rot * m_hcs[1]; }
bool Plane::InitAverage(const MiscLib::Vector< Vec3f > &samples) { if(samples.size() < 1) return false; m_normal = Vec3f(0, 0, 0); m_pos = Vec3f(0, 0, 0); size_t c = samples.size() / 2; MiscLib::Vector< GfxTL::Vector3Df > normals(c); for(intptr_t i = 0; i < c; ++i) normals[i] = GfxTL::Vector3Df(samples[i + c]); GfxTL::Vector3Df meanNormal; GfxTL::MeanOfNormals(normals.begin(), normals.end(), &meanNormal); m_normal = Vec3f(meanNormal.Data()); GfxTL::Vector3Df mean; GfxTL::Mean(samples.begin(), samples.begin() + c, &mean); m_pos = Vec3f(mean.Data()); m_dist = m_pos.dot(m_normal); return true; }