Ejemplo n.º 1
0
 def setUp(self):
     self.params = {
         "ranges": [myRange(1, 30), myRange(1, 30)],
         "genPoints": 225
     }
     self.ranges = self.params['ranges']
     gen = h.getGenerator(self.ranges, self.params['genPoints'])
     self.points = gen()
Ejemplo n.º 2
0
def getHalton(params):
    rangeLists = map(lambda dim: dim['range'], params['dimensions'])
    ranges = map(lambda r: u.rangeIncludingBounds(r[0], r[1]), rangeLists)
    numGeneratedPoints = params['numGeneratedPoints']
    return ha.getGenerator(ranges, numGeneratedPoints)
Ejemplo n.º 3
0
def getHalton(params):
    rangeLists = map(lambda dim: dim['range'], params['dimensions'])
    ranges = map(lambda r: u.rangeIncludingBounds(r[0], r[1]), rangeLists)
    numGeneratedPoints = params['numGeneratedPoints']
    return ha.getGenerator(ranges, numGeneratedPoints)
Ejemplo n.º 4
0
def run():
    timeStart = time.time()
    perspective = True
    jittering = False
    numJitters = 8
    jitterArray = Halton.halton_sequence(numJitters, 2)

    o = AccelStruct()
    lights = []

    # OBJ file
    # m = Parser.parse("meshes/dragon.obj", transform=np.dot(Helper.scaleMatrix(0.7, 0.7, 0.7),
    #                                                        Helper.translationMatrix(1.25, 1.25, 1.75)))
    # print(m.min)
    # print(m.max)
    # o.add(m)

    # Cornell Box
    # o.add(RectFace([0, 0, 0], [550, 0, 0], [0, 0, 550], mat=[250, 250, 250]))  # floor
    # o.add(RectFace([0, 550, 0], [0, 550, 550], [550, 550, 0], mat=[250, 250, 250]))  # ceiling
    # o.add(RectFace([0, 0, 550], [550, 0, 550], [0, 550, 550], mat=[250, 250, 250]))  # back wall
    # o.add(RectFace([0, 0, 0], [0, 0, 550], [0, 550, 0], mat=[0, 250, 0]))  # right wall
    # o.add(RectFace([550, 0, 0], [550, 550, 0], [550, 0, 550], mat=[250, 0, 0]))  # left wall
    # o.add(Box([130, 0, 65], [160, 0, 49], [-49, 0, 160], [0, 165, 0], mat=[255, 255, 255]))  # short box
    # o.add(Box([265, 0, 296], [158, 0, -49], [49, 0, 158], [0, 330, 0], mat=[255, 255, 255]))  # tall box
    # # lights.append(AreaLight([213, 549, 227], [343, 549, 227], [213, 549, 332], o))
    # lights.append(PointLight([300, 540, 200]))
    # viewPt = np.array([278.0, 273.0, -800.0])
    # viewDir = Helper.normalize(np.array([0.0, 0.0, 1.0]))
    # viewUp = Helper.normalize(np.array([0.0, 1.0, 0.0]))
    # viewPortDist = 1.0
    # viewZoom = 1.5

    # Blobby
    # BlobbyParticles(o, [255, 0, 0], 0.1, *particles)
    # for p in particles:
    #     o.add(Sphere(2.0, p, mat=[255, 0, 0]))

    # Textures
    # o.add(Plane([0, 0, 0], [0, 1, 0], mat=[250, 250, 250], minimum=[-10, -10, -10], maximum=[10, 10, 10], matfunc=grid))
    # o.add(
    #     Plane([0, 0, -3], [0, 0, 1], mat=[250, 250, 250], minimum=[-10, -10, -10], maximum=[10, 10, 10], matfunc=grid))
    o.add(Sphere(2.0, [-3, 1, -1], mat=[50, 130, 250], matfunc=marbleTexture))

    # CSG
    c = CSG(Sphere(3.0, [0, 3, 0], mat=[250, 0, 0], matfunc=grid))
    c.add(Sphere(3.0, [1, 3, 0]), 1)
    # c.add(Sphere(3.0, [0.5, 0, 0]), 1)
    o.add(c)

    lights.append(PointLight([0, 10, 2]))
    viewPt = [0, 2, 6]
    viewDir = [0, 0, -1]
    viewUp = [0, 1, 0]
    viewPortDist = 1.0
    viewZoom = 0.5

    # create a viewport and image
    v = ViewPort(resolution, resolution, viewPt, viewDir, viewUp, viewPortDist,
                 viewZoom)
    a = np.zeros((v.h, v.w, 3))
    o.calculate()
    print("Total time to setup objects: {:.3}s".format(time.time() -
                                                       timeStart))
    timeStart = time.time()
    with concurrent.futures.ThreadPoolExecutor() as e:
        futures = []
        for row in tqdm(range(v.h)):
            for col in range(v.w):
                if jittering:
                    for n in range(numJitters):
                        ray = Ray(
                            v.getPixelCenterJittered(col, row, jitterArray, n),
                            viewDir)
                        if perspective:
                            ray.d = Helper.normalize(ray.o - viewPt)

                        futures.append(
                            e.submit(Helper.rayTrace, ray, o, lights, row, col,
                                     0))
                else:
                    ray = Ray(v.getPixelCenter(col, row), viewDir)
                    if perspective:
                        ray.d = Helper.normalize(ray.o - viewPt)

                    futures.append(
                        e.submit(Helper.rayTrace, ray, o, lights, row, col, 0))
        with tqdm(total=v.h * v.w * numJitters if jittering else v.h *
                  v.w) as pbar:
            for future in concurrent.futures.as_completed(futures):
                (row, col, color) = future.result()
                pbar.update()
                if color is not None:
                    if jittering:
                        a[row, col] += color / numJitters
                    else:
                        a[row, col] = color

    timeEnd = time.time()
    time.sleep(0.1)
    print("Total time to compute ray trace on {:} pixels: {:.4}s".format(
        v.w * v.h, timeEnd - timeStart))
    print("Average time to compute each pixel: {:.3}ms".format(
        1000.0 * (timeEnd - timeStart) / (v.w * v.h)))
    # a *= 255.0/a.max()
    im = Image.new("RGB", (v.w, v.h))
    pix = im.load()
    for row in range(v.h):
        for col in range(v.w):
            pix[row, (v.w - 1) - col] = tuple(a[row, col].astype(int))
    im.save('out.bmp')
Ejemplo n.º 5
0
 def setUp(self):
     self.params = {"ranges": [myRange(1, 30), myRange(1, 30)], "genPoints": 225}
     self.ranges = self.params["ranges"]
     gen = h.getGenerator(self.ranges, self.params["genPoints"])
     self.points = gen()