def test_isect_b(self): point = Vector3(0.0, 0.0, 55.92) e1 = Vector3(55.28, 0.0, 0.0) e2 = Vector3(0.0, 54.88, 0.0) normal = Vector3(0.0, 0.0, -1.0) rectangle = Rectangle(point, e1, e2, normal) origin = Vector3(3.0, 2.5, 0.0) direction = Vector3(0.0, 0.1, 0.88) direction.normalize() ray = Ray(origin, direction) runtime = Runtime() rectangle.isect_asm_b([runtime], "ray_rectangle_intersection") assembler = create_assembler() mc = assembler.assemble(self.asm_code_bool()) ds = runtime.load("test", mc) Ray.populate_ds(ds, ray, 'ray1') Rectangle.populate_ds(ds, rectangle, 'rec1') runtime.run("test") hp = rectangle.isect(ray) if hp is False: self.assertFalse(ds["ret"] != 0) if ds["ret"] == 0: self.assertFalse(hp)
def random_ray(ds): origin = Vector3(0.0, 0.0, 0.0) direction = Vector3(random(), random(), random()) direction.normalize() ray = Ray(origin, direction) ray_ds(ds, ray, 'ray1') return ray
def test_isect1(self): direction = Vector3(-1.0, -1.0, -1.0) direction.normalize() ray = Ray(Vector3(5.0, 5.0, 5.0), direction) sphere = Sphere(Vector3(0.0, 0.0, 0.0), 2) runtime = Runtime() assembler = create_assembler() sphere.isect_asm([runtime], "ray_sphere_intersection") mc = assembler.assemble(self.asm_code()) ds = runtime.load("test", mc) self.intersect(ray, sphere, runtime, ds) for i in range(100): r = self.random_ray() s = self.random_sphere() self.intersect(r, s, runtime, ds)
def test_isect1(self): point = Vector3(0.0, 0.0, 55.92) e1 = Vector3(55.28, 0.0, 0.0) e2 = Vector3(0.0, 54.88, 0.0) normal = Vector3(0.0, 0.0, -1.0) rectangle = Rectangle(point, e1, e2, normal) origin = Vector3(3.0, 2.5, 0.0) direction = Vector3(0.0, 0.1, 0.88) direction.normalize() ray = Ray(origin, direction) runtime = Runtime() rectangle.isect_asm([runtime], "ray_rectangle_intersection") assembler = create_assembler() mc = assembler.assemble(self.asm_code()) ds = runtime.load("test", mc) self.intersect(ray, rectangle, runtime, ds)
t = Triangle(v0, v1, v2) v0 = Vector3(2.6, 4.4, 6.6) v1 = Vector3(1.2, 1.1, 1.1) v2 = Vector3(5.1, -1.1, 5.1) t2 = Triangle(v0, v1, v2) mgr = ShapeManager() mgr.add('t1', t) mgr.add('t2', t2) origin = Vector3(0.2, 0.4, 0.6) direction = Vector3(1.2, 1.1, 1.12) direction.normalize() ray = Ray(origin, direction) linear = LinearIsect(mgr) hit = linear.isect(ray) runtime = Runtime() linear.isect_asm([runtime], 'ray_scene_intersection') code = "#DATA \n" code += Ray.asm_struct() + HitPoint.asm_struct() + """ Ray ray1 Hitpoint hp1 uint32 ret #CODE
def random_ray(self): origin = Vector3(random(), random(), random()) direction = Vector3(random(), random(), random()) direction.normalize() return Ray(origin, direction)
def generate_ray(bbox): dir = random_in_bbox(bbox) dir.normalize() origin = Vector3(0.0, 0.0, 0.0) return Ray(origin, dir)