コード例 #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
ファイル: test_model.py プロジェクト: chiknas/raytrashing
    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
ファイル: test_model.py プロジェクト: chiknas/raytrashing
 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
ファイル: test_model.py プロジェクト: chiknas/raytrashing
 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
ファイル: test_model.py プロジェクト: chiknas/raytrashing
 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
ファイル: test_model.py プロジェクト: chiknas/raytrashing
 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
ファイル: test_model.py プロジェクト: chiknas/raytrashing
 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
ファイル: test_model.py プロジェクト: chiknas/raytrashing
 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
ファイル: test_model.py プロジェクト: chiknas/raytrashing
    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
ファイル: test_model.py プロジェクト: chiknas/raytrashing
    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
ファイル: test_model.py プロジェクト: chiknas/raytrashing
    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
ファイル: test_model.py プロジェクト: chiknas/raytrashing
 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
ファイル: Plane.py プロジェクト: chiknas/raytrashing
 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
ファイル: Sphere.py プロジェクト: chiknas/raytrashing
 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
ファイル: test_model.py プロジェクト: chiknas/raytrashing
 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
ファイル: test_model.py プロジェクト: chiknas/raytrashing
 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
ファイル: Sphere.py プロジェクト: chiknas/raytrashing
 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
ファイル: test_model.py プロジェクト: chiknas/raytrashing
    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
ファイル: Object3D.py プロジェクト: chiknas/raytrashing
 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
ファイル: RayTracer.py プロジェクト: chiknas/raytrashing
 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
ファイル: Cylinder.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, 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
ファイル: JSONParser.py プロジェクト: chiknas/raytrashing
    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
ファイル: JSONParser.py プロジェクト: chiknas/raytrashing
    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)