Beispiel #1
0
    def intersect_tris(self, segment):
        def ray_intersect_octree_rec(node, ray, sc):
            ret = []
            if node.bb.intersect(ray):
                if not node.childs:
                    for t in node.faces:
                        v1 = sc.points[t[0]]
                        v2 = sc.points[t[1]]
                        v3 = sc.points[t[2]]
                        intersection = rayIntersectsTriangle(ray[0], ray[1],
                            v1, v2, v3)
                        # print_tri( v1, v2, v3 )
                        # print 'hit ?', intersection
                        if intersection:
                            ret.append( (t, intersection) )

                for child in node.childs:
                    ret.extend( ray_intersect_octree_rec(child, ray, sc) )

            return ret

        ray = build_ray(segment)
        return ray_intersect_octree_rec(self.root, ray, self.root.sc)
Beispiel #2
0
 def intersect_triangle(self, face, verts):
     return self.intersect( build_ray( (verts[face[0]], verts[face[1]]) ) ) or \
            self.intersect( build_ray( (verts[face[1]], verts[face[2]]) ) ) or \
            self.intersect( build_ray( (verts[face[2]], verts[face[0]]) ) )
Beispiel #3
0
 def intersect_triangle(self, face, verts):
     return self.intersect( build_ray( (verts[face[0]], verts[face[1]]) ) ) or \
            self.intersect( build_ray( (verts[face[1]], verts[face[2]]) ) ) or \
            self.intersect( build_ray( (verts[face[2]], verts[face[0]]) ) )