def Dtest_isect2(self): factory = renmas2.Factory() ren = renmas2.Renderer() runtime = Runtime() ply = renmas2.core.Ply() ply.load("I:/Ply_files/cube.ply") #ply.load("I:/Ply_files/dragon_vrip.ply") vb = ply._vertex_buffer tb = ply._triangle_buffer mesh = factory.create_mesh(vb, tb) triangles = self.create_triangle_list(vb, tb) mesh.isect_asm([runtime], "ray_flat_mesh_intersection", ren.assembler, ren.structures) mc = ren.assembler.assemble(self.asm_code2(ren)) ds = runtime.load("test", mc) for i in range(100): ray = self.random_ray() self.ray_ds(ds, ray, "ray1") self.flat_mesh_ds(ds, mesh, "mesh1") runtime.run("test") hp = mesh.isect(ray) if hp: print(hp.t) print(ds["hp1.t"]) print(ds["ret"])
def create_triangle_list(self, vb, tb): lst_triangles = [] factory = renmas2.Factory() for i in range(tb.size()): v0, v1, v2 = tb.get(i) p0 = vb.get(v0) p1 = vb.get(v1) p2 = vb.get(v2) triangle = factory.create_triangle(v0=p0, v1=p1, v2=p2) lst_triangles.append(triangle) return lst_triangles
def Atest_isect1(self): factory = renmas2.Factory() ren = renmas2.Renderer() runtime = Runtime() ply = renmas2.core.Ply() ply.load("I:/Ply_files/cube.ply") #ply.load("I:/Ply_files/dragon_vrip.ply") #ply.load("I:/Ply_files/xyzrgb_dragon.ply") #ply.load("I:/Ply_files/lucy.ply") vb = ply._vertex_buffer tb = ply._triangle_buffer mesh = factory.create_mesh(vb, tb) triangles = self.create_triangle_list(vb, tb) #self.intersection_tests(10, triangles, mesh) mesh._isect_triangles_asm([runtime], "ray_triangles_idx", ren.assembler, ren.structures) mc = ren.assembler.assemble(self.asm_code1(ren)) ds = runtime.load("test", mc) ray = self.random_ray() self.ray_ds(ds, ray, "ray1") self.flat_mesh_ds(ds, mesh, "mesh1") addr = mesh._grid._get_addr_in_array(0, 1, 2) print(addr) ds["ptr_triangles_arr"] = addr ntri = x86.GetUInt32(addr, 0, 0) triangles = x86.GetUInt32(addr + 4, 0, ntri) hp = mesh.isect_triangles(ray, triangles) print(hp) if hp: print("t=", hp.t) print("hit=", hp.hit_point) print("normala=", hp.normal) print(ntri) print(triangles) runtime.run("test") print("ret", ds["ret"]) print("t= ", ds["t"]) print("hit=", ds["hit"]) print("normala", ds["normal"]) start = time.clock() #self.speed_test(20, triangles, mesh) end = time.clock()