예제 #1
0
    def test_specularReflection2(self):
        #Light
        light = Light(0, 0, 0, 1)

        # Sphere 1
        c1 = Vector(0, 0, 12)
        s1 = Sphere(c1, 1, Color(0, 1, 0), 0)

        scene = Scene()
        scene.addObject3D(s1)
        scene.addLight(light)

        camera = Camera(Vector(0, 0, 0), Vector(0, 0, 1), 30)

        imagepl = Imageplane(500, 500)

        raytracer = RayTracer(imagepl, scene, camera)

        pixelRay = Ray(camera.position, Vector(0.001, 0, 1))

        sphereIntersection = s1.intersection(pixelRay, 1, math.inf)

        arrColor = raytracer.getColorForIntersection(sphereIntersection, 0)
        testColor = arrColor


        green = Color()
        green.green()

        testValue = testColor.isBrighterOrEqualTo(green)
        self.assertFalse(testValue)
예제 #2
0
    def test_checkReflectionAndTransparency(self):
        object = Object3D(Vector(0, 0, 5), Color(1, 0, 0), 0, 0.4, 0.3)
        objectMore = Object3D(Vector(0, 0, 5), Color(1, 0, 0), 0, 1.0, 1.0)

        self.assertEqual(object.getReflection(), 0.4)
        self.assertEqual(object.getTransparency(), 0.3)

        self.assertEqual(objectMore.getReflection(), 0.5)
        self.assertEqual(objectMore.getTransparency(), 0.5)
예제 #3
0
 def test_compareBrightness(self):
     red = Color()
     red.red()
     white = Color()
     white.white()
     test1 = red.isBrighterOrEqualTo(white)
     test2 = white.isBrighterOrEqualTo(red)
     self.assertFalse(test1)
     self.assertTrue(test2)
예제 #4
0
 def test_getSurfaceNormal2(self):
     cylinder = Cylinder(Vector(0, 0, 5), 10, 1.5, Color().red(), 10, 0.1)
     point = Vector(-1.5, 2.5, 5)
     surfaceNormal = cylinder.getSurfaceNormal(point)
     self.assertEqual(surfaceNormal.x, -1)
     self.assertEqual(surfaceNormal.y, 0)
     self.assertEqual(surfaceNormal.z, 0)
예제 #5
0
 def test_intersection6(self):
     cylinder = Cylinder(Vector(0, 8, 14), 10, 1.5, Color().red(), 10, 0.1)
     ray = Ray(Vector(0, 0, 0), Vector(0.0, 0.2, 1))
     intersection = cylinder.intersection(ray, 0, 1000)
     self.assertAlmostEqual(intersection.point.x, 0.0)
     self.assertAlmostEqual(intersection.point.y, 3)
     self.assertAlmostEqual(intersection.point.z, 15)
예제 #6
0
 def test_intersection5(self):
     cylinder = Cylinder(Vector(0, 0, 5), 2, 1, Color().red(), 10, 0.1)
     ray = Ray(Vector(0, 0, 0), Vector(0.1, -0.2, 1))
     intersection = cylinder.intersection(ray, 0, 1000)
     self.assertAlmostEqual(intersection.point.x, 0.4087346744)
     self.assertAlmostEqual(intersection.point.y, -0.8174693488)
     self.assertAlmostEqual(intersection.point.z, 4.0873467439)
예제 #7
0
 def test_intersection2(self):
     cylinder = Cylinder(Vector(0, 0, 5), 2, 1, Color().red(), 10, 0.1)
     ray = Ray(Vector(0, 0, 0), Vector(0, 0.1, 1))
     intersection = cylinder.intersection(ray, 0, 1000)
     self.assertEqual(intersection.point.x, 0.0)
     self.assertEqual(intersection.point.y, 0.4)
     self.assertEqual(intersection.point.z, 4.0)
예제 #8
0
 def test_constructor(self):
     cylinder = Cylinder(Vector(0, 0, 5), 2, 1, Color().red(), 10, 0.1)
     self.assertEqual(cylinder.center.x, 0)
     self.assertEqual(cylinder.center.y, 0)
     self.assertEqual(cylinder.center.z, 5)
     self.assertEqual(cylinder.radius, 1)
     self.assertEqual(cylinder.height, 2)
예제 #9
0
    def test_intersection5(self):
        cone = Cone(Vector(0, 2.5, 5), 3, 1, Color(1, 0, 0))
        ray = Ray(Vector(0, 0, 0), Vector(0.05, 0.2, 1))
        intersection = cone.intersection(ray, 0.00001, 1000)

        self.assertAlmostEqual(intersection.point.x, 0.25, 3)
        self.assertAlmostEqual(intersection.point.y, 1.0, 3)
        self.assertAlmostEqual(intersection.point.z, 5, 3)
예제 #10
0
    def test_intersection4(self):
        cone = Cone(Vector(0, 0, 5), 3, 1, Color(1, 0, 0))
        ray = Ray(Vector(0, 0, 0), Vector(0.05, -0.3, 1))
        intersection = cone.intersection(ray, 0.00001, 1000)

        self.assertAlmostEqual(intersection.point.x, 0.205613676)
        self.assertAlmostEqual(intersection.point.y, -1.233682056)
        self.assertAlmostEqual(intersection.point.z, 4.11227352)
예제 #11
0
    def test_intersection2(self):
        cone = Cone(Vector(0, 0, 5), 3, 1, Color(1, 0, 0))
        ray = Ray(Vector(0, 0, 0), Vector(0.0, 0.05, 1))
        intersection = cone.intersection(ray, 0.00001, 1000)

        self.assertAlmostEqual(intersection.point.x, 0.0)
        self.assertAlmostEqual(intersection.point.y, 0.2288135593)
        self.assertAlmostEqual(intersection.point.z, 4.5762711864)
예제 #12
0
 def test_constructor(self):
     cube = Cube(Vector(1, 1, 1), 2, Color().red(), 10)
     self.assertEqual(cube.minPoint.x, 0)
     self.assertEqual(cube.minPoint.y, 0)
     self.assertEqual(cube.minPoint.z, 0)
     self.assertEqual(cube.maxPoint.x, 2)
     self.assertEqual(cube.maxPoint.y, 2)
     self.assertEqual(cube.maxPoint.z, 2)
예제 #13
0
파일: Cube.py 프로젝트: chiknas/raytrashing
 def __init__(self,
              v=Vector(0, 0, 0),
              l=0,
              color=Color(),
              specular=100,
              reflection=0.1,
              transparency=0,
              refractiveIndex=1.0):
     super().__init__(v, l, l, l, color, specular, reflection, transparency,
                      refractiveIndex)
예제 #14
0
 def __init__(self,
              point,
              normal,
              color=Color(),
              specular=100,
              reflection=0.1,
              transparency=0.0,
              refractiveIndex=1.0):
     super().__init__(point, color, specular, reflection, transparency,
                      refractiveIndex)
     self.direction = normal
예제 #15
0
 def __init__(self,
              v=Vector(0, 0, 0),
              radius=0,
              color=Color(),
              specular=50,
              reflection=0.1,
              transparency=0,
              refractiveIndex=1.0):
     super().__init__(v, color, specular, reflection, transparency,
                      refractiveIndex)
     self.radius = radius
예제 #16
0
파일: Cube.py 프로젝트: chiknas/raytrashing
 def __init__(self,
              x=0,
              y=0,
              z=0,
              l=0,
              color=Color(),
              specular=100,
              reflection=0.1,
              transparency=0,
              refractiveIndex=1.0):
     super().__init__(x, y, z, l, l, l, color, specular, reflection,
                      transparency, refractiveIndex)
예제 #17
0
 def test_multiply(self):
     black = Color(0.0, 0.0, 0.0)
     small = Color(0.1, 0.1, 0.1)
     multiplier = 0.3
     multiplicationResultblack = black.multiply(multiplier)
     multiplicationResultsmall = small.multiply(multiplier)
     self.assertEqual(multiplicationResultblack.getArray(),
                      black.getArray())
     self.assertEqual(multiplicationResultsmall.getArray(),
                      [0.03, 0.03, 0.03])
예제 #18
0
 def test_addition(self):
     black = Color(0.3, 0.2, 0.16)
     small = Color(0.2, 0.8, 0.62)
     additionResult = black.add(small)
     additionResult2 = small.add(black)
     self.assertEqual(additionResult.getArray(), [0.5, 1.0, 0.78])
     self.assertEqual(additionResult2.getArray(), [0.5, 1.0, 0.78])
예제 #19
0
    def test_diffusion1(self):
        #Light
        light = Light(0, 0, 0, 1)

        # Sphere 1
        c1 = Vector(0, 0, 12)
        s1 = Sphere(c1, 1, Color(0, 1, 0), 1000)

        scene = Scene()
        scene.addObject3D(s1)
        scene.addLight(light)

        camera = Camera(Vector(0, 0, 0), Vector(0, 0, 1), 30)

        imagepl = Imageplane(500, 500)

        raytracer = RayTracer(imagepl, scene, camera)

        pixelRay1 = Ray(camera.position, Vector(0.001, 0, 1))

        pixelRay2 = Ray(camera.position, Vector(0.01, 0, 1))

        pixelRay3 = Ray(camera.position, Vector(0.02, 0, 1))

        pixelRay4 = Ray(camera.position, Vector(0.03, 0, 1))

        sphereIntersection1 = s1.intersection(pixelRay1, 0, 1000)

        sphereIntersection2 = s1.intersection(pixelRay2, 0, 1000)

        sphereIntersection3 = s1.intersection(pixelRay3, 0, 1000)

        sphereIntersection4 = s1.intersection(pixelRay4, 0, 1000)

        arrColor1 = raytracer.getColorForIntersection(sphereIntersection1, 0)
        arrColor2 = raytracer.getColorForIntersection(sphereIntersection2, 0)
        arrColor3 = raytracer.getColorForIntersection(sphereIntersection3, 0)
        arrColor4 = raytracer.getColorForIntersection(sphereIntersection4, 0)

        testColor1 = arrColor1
        testColor2 = arrColor2
        testColor3 = arrColor3
        testColor4 = arrColor4

        testValue3 = testColor3.isBrighterOrEqualTo(testColor4)
        self.assertTrue(testValue3)

        testValue2 = testColor2.isBrighterOrEqualTo(testColor3)
        self.assertTrue(testValue2)

        testValue1 = testColor1.isBrighterOrEqualTo(testColor2)
        self.assertTrue(testValue1)
예제 #20
0
 def __init__(self,
              x=0,
              y=0,
              z=0,
              radius=0,
              color=Color(),
              specular=50,
              reflection=0.1,
              transparency=0,
              refractiveIndex=1.0):
     super().__init__(x, y, z, color, specular, reflection, transparency,
                      refractiveIndex)
     self.radius = radius
예제 #21
0
    def test_largeScene(self):
        light = Light(0, 2, 6, 1)
        ambientLight = AmbientLight(0.3)

        # Sphere 1
        c1 = Vector(.8, .5, 1.5)
        s1 = Sphere(c1, .4, Color(0, 1, 0), 10)

        # Sphere 2
        c2 = Vector(.7, .1, 1.)
        s2 = Sphere(c2, .7, Color(0, 0, 1), 10)

        # Sphere 3
        c3 = Vector(.4, .4, .7)
        s3 = Sphere(c3, .2, Color(1, 0, 0), 10)

        # Create Scene
        scene = Scene()
        scene.addObject3D(s1)
        scene.addObject3D(s2)
        scene.addObject3D(s3)
        scene.addLight(light)
        scene.addLight(ambientLight)

        camera = Camera(Vector(0, 0, 0), Vector(0, 0, 1), Vector(1, 0, 0),
                        math.pi / 4)

        imagepl = Imageplane(500, 500)

        raytracer = RayTracer(imagepl, scene, camera)

        startTime = time.time()

        raytracer.startRayTracing()

        endTime = time.time()

        self.assertLessEqual(endTime - startTime, 200)
예제 #22
0
    def test_constructor(self):
        cone = Cone(Vector(0, 0, 5), 3, 1, Color(1, 0, 0))
        self.assertEqual(cone.bottom.x, 0)
        self.assertEqual(cone.bottom.y, -1.5)
        self.assertEqual(cone.bottom.z, 5)

        self.assertEqual(cone.top.x, 0)
        self.assertEqual(cone.top.y, 4.5)
        self.assertEqual(cone.top.z, 5)

        self.assertEqual(cone.radius, 1)
        self.assertEqual(cone.height, 3)

        self.assertAlmostEqual(cone.alpha, 18.43494882)
예제 #23
0
 def __init__(self,
              center=Vector(0, 0, 0),
              color=Color(),
              specular=100,
              reflection=0.1,
              transparency=0,
              refractiveIndex=1.0):
     self.center = center
     self.color = color
     self.specular = specular
     self.reflection = reflection
     self.transparency = transparency
     self.checkReflectionAndTransparencyLimit()
     self.refractiveIndex = refractiveIndex
예제 #24
0
 def __init__(self,
              imageplane=Imageplane(),
              mainscene=Scene(),
              camera=Camera(),
              antialiasing=False):
     self.recursionLimit = 3
     self.backgroundColor = Color(0, 0, 0)
     self.imageplane = imageplane
     self.scene = mainscene
     self.camera = camera
     self.imageAspectRatio = imageplane.width / imageplane.height
     self.img = numpy.zeros(
         (imageplane.getHeight(), imageplane.getWidth(), 3))
     self.antialiasing = antialiasing
예제 #25
0
 def __init__(self,
              v=Vector(0, 0, 0),
              height=0,
              radius=0,
              color=Color(),
              specular=50,
              reflection=0.1,
              transparency=0,
              refractiveIndex=1.0):
     super().__init__(v, color, specular, reflection, transparency,
                      refractiveIndex)
     self.radius = radius
     self.height = height
     self.top = Vector(v.x, v.y + height / 2, v.z)
     self.bottom = Vector(v.x, v.y - height / 2, v.z)
     self.va = self.top.sub(self.center).normalize()
예제 #26
0
    def deserializeScene(self, json):
        scene = Scene()

        jsonScene = json["Scene"]

        for object in jsonScene["Object3D"]:
            type = list(object.keys())[0]
            if (type == "Sphere"):
                scene.addObject3D(self.deserializeSphere(object[type]))
            elif (type == "Cube"):
                scene.addObject3D(self.deserializeCube(object[type]))
            elif (type == "Cylinder"):
                scene.addObject3D(self.deserializeCylinder(object[type]))
            elif (type == "Cone"):
                scene.addObject3D(self.deserializeCone(object[type]))

        for light in jsonScene["Light"]:
            scene.addLight(self.deserializeLight(light))

        scene.addLight(self.deserializeAmbientLight(jsonScene["AmbientLight"]))

        if self.deserializeFloor(jsonScene["Floor"]):
            scene.addObject3D(
                Plane(Vector(0, -3, 0), Vector(0, 1, 0),
                      Color(0.75, 0.7, 0.75), 500, 0.2))

        if self.deserializeRoom(jsonScene["Room"]):
            scene.addObject3D(
                Plane(Vector(0, -3, 0), Vector(0, 1, 0),
                      Color(0.75, 0.7, 0.75), 500, 0.2))
            scene.addObject3D(
                Plane(Vector(0, 10, 0), Vector(0, 1, 0), Color(0., 0.6, 0.2),
                      0, 0))

            scene.addObject3D(
                Plane(Vector(0, 0, 30), Vector(0, 0, -1),
                      Color(0.63, 0.73, 0.65), 0, 0))
            scene.addObject3D(
                Plane(Vector(0, 0, -1), Vector(0, 0, 1), Color(0.9, 0.6, 0.4),
                      0, 0))

            scene.addObject3D(
                Plane(Vector(-10, 0, 0), Vector(1, 0, 0), Color(1., 0.4, 0.4),
                      0, 0))
            scene.addObject3D(
                Plane(Vector(10, 0, 0), Vector(-1, 0, 0), Color(0.6, 0.8, 1.0),
                      0, 0))

        return scene
예제 #27
0
    def test_SimpleScene(self):

        light = Light(0, 2, 6, 1)

        center = Vector(.8, .1, 1.)

        sphere = Sphere(center, .4, Color(1, 0, 0), 0)

        scene = Scene()
        scene.addObject3D(sphere)
        scene.addLight(light)

        camera = Camera(Vector(0, 0, 0), Vector(0, 0, 1), Vector(1, 0, 0),
                        math.pi / 4)

        imagepl = Imageplane(500, 500)

        raytracer = RayTracer(imagepl, scene, camera)

        startTime = time.time()
        raytracer.startRayTracing()
        endTime = time.time()

        self.assertLessEqual(endTime - startTime, 100)
예제 #28
0
파일: Cone.py 프로젝트: chiknas/raytrashing
 def __init__(self, v=Vector(0, 0, 0), height=0, radius=0, color=Color(), specular=50, reflection=0.1, transparency=0, refractiveIndex=1.0):
     super().__init__(v, height, radius, color, specular, reflection, transparency, refractiveIndex)
     self.alpha = self.calculateAlpha()
     self.center = self.top
     self.bottom = Vector(self.center.x, self.center.y - self.height, self.center.z)
     self.top = Vector(self.center.x, self.center.y + self.height, self.center.z)
예제 #29
0
    def deserializeColor(self, colorJson):
        r = float(colorJson["r"])
        g = float(colorJson["g"])
        b = float(colorJson["b"])

        return Color(r, g, b)
예제 #30
0
from RayTracing.Classes.Models.Cone import Cone
from RayTracing.Classes.Models.Cube import Cube
from RayTracing.Classes.Models.Imageplane import Imageplane
from RayTracing.Classes.Models.Light import Light
from RayTracing.Classes.Models.Scene import Scene
from RayTracing.Classes.Models.Sphere import Sphere
from RayTracing.Classes.Models.Vector import Vector
from RayTracing.Classes.Models.Plane import Plane
from RayTracing.Classes.RayTracer import RayTracer

if __name__ == '__main__':

    sCenter1 = Vector(2, 1, 10)
    sCenter2 = Vector(-2, 1, 13)

    p1 = Plane(Vector(0, -3, 0), Vector(0, 1, 0), Color(1, 0, 0), 0, 0)
    p2 = Plane(Vector(0, 10, 0), Vector(0, -1, 0), Color(0.1, 1.0, 1.0), 0, 0)

    p3 = Plane(Vector(0, 0, 30), Vector(0, 0, -1), Color(0.7, 0.1, 0.2), 0, 0)
    p4 = Plane(Vector(0, 0, -1), Vector(0, 0, 1), Color(0.1, 0.4, 0.8), 0, 0)

    p5 = Plane(Vector(-10, 0, 0), Vector(1, 0, 0), Color(0.2, 0.1, 0.6), 0, 0)
    p6 = Plane(Vector(10, 0, 0), Vector(-1, 0, 0), Color(0.1, 0.7, 0.2), 0, 0)

    s1 = Sphere(sCenter1, 1, Color(1.0, 0, 0), 600, 0, 0)
    s2 = Sphere(sCenter2, 1.3, Color(0, 1.0, 0), 500, 0, 0)

    cube = Cube(Vector(0, 0, 25), 10, Color(0, 1, 0), 1000, 0, 0)

    cone = Cone(Vector(0, 0, 10), 1, 1, Color(1, 0, 0), 1000, 0, 0)
    cylinder = Cylinder(Vector(0, -3, 8), 1, 1, Color(1, 0, 0), 1000, 0.8, 0)