Beispiel #1
0
    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"])
Beispiel #2
0
 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
Beispiel #3
0
    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()