示例#1
0
 void Entity::pick(const Rayf& ray, PickResult& pickResults) {
     float dist = bounds().intersectWithRay(ray, NULL);
     if (Math<float>::isnan(dist))
         return;
     
     Vec3f hitPoint = ray.pointAtDistance(dist);
     EntityHit* hit = new EntityHit(*this, hitPoint, dist);
     pickResults.add(hit);
 }
示例#2
0
        void Brush::pick(const Rayf& ray, PickResult& pickResults) {
            float dist = bounds().intersectWithRay(ray, NULL);
            if (Math<float>::isnan(dist))
                return;

            dist = Math<float>::nan();
            Side* side = NULL;
            for (unsigned int i = 0; i < m_geometry->sides.size() && Math<float>::isnan(dist); i++) {
                side = m_geometry->sides[i];
                dist = side->intersectWithRay(ray);
            }

            if (!Math<float>::isnan(dist)) {
                assert(side != NULL);
                Vec3f hitPoint = ray.pointAtDistance(dist);
                FaceHit* hit = new FaceHit(*(side->face), hitPoint, dist);
                pickResults.add(hit);
            }
        }