naivert: An Implementation For Ray Tracing Algorithm

About naivert

naivert is an implementation of ray tracing algorithm using Phong illumination model.

For geometry calculation, naivert uses the library of Geometry3D.

You may refer to the examples and documentation of Geometry3D to get to know how to use naivert.

Core Features

  • Simple Object like Cubic, Sphere, Cylinder, Cone, Rectangle, Parallepiped, Parallogram and Circle.

  • Point light sources and ambient light sources.

  • Basic materials.

  • Ray tracing algorithm rendering.

  • Phong illumination model.

Examples

Here are some examples. This might be very slow, you should change the resolution of the image to reduce the time cost.

Example 1

Simply run the code below after installation:

>>> import naivert
>>> from Geometry3D import *
>>> from math import sqrt
>>> main_scene = naivert.Scene()
>>> main_camera = naivert.Camera(Point(400,-300,400),Point(385,-285,385),10 * Vector(-1 /sqrt(6),1/sqrt(6),>>> 2/sqrt(6)),10*Vector(1/sqrt(2),1/sqrt(2),0),'main_camera.png',resolution=(600,600))
>>> point_light = naivert.PointLight(Point(50,100,200),[5.0,5.0,5.0])
>>> point_light2 = naivert.PointLight(Point(200,50,200),[4.0,4.0,4.0])
>>> ambient_light = naivert.AmbientLight([3.0,3.0,3.0])
>>> main_scene.add_camera(main_camera)
>>> main_scene.add_light(point_light)
>>> main_scene.add_light(point_light2)
>>> main_scene.add_light(ambient_light)
>>> main_scene.add_cph(Parallelepiped(Point(-51,-50,0),1*x_unit_vector(),200*y_unit_vector(),>>> 200*z_unit_vector()),naivert.Material.SpecularMaterial_White_1(),reverse_normal=False)
>>> main_scene.add_cph(Parallelepiped(Point(-50,150,0),200*x_unit_vector(),1*y_unit_vector(),>>> 200*z_unit_vector()),naivert.Material.SpecularMaterial_White_1(),reverse_normal=False)
>>> main_scene.add_cph(Parallelepiped(Point(50,0,0),30*x_unit_vector()+40*y_unit_vector(),-4*x_unit_vector()>>> +3*y_unit_vector(), 80*z_unit_vector()),naivert.Material.Glass(),reverse_normal=False)
>>> main_scene.add_cph(Parallelepiped(Point(10,10,0),20*x_unit_vector(),20*y_unit_vector(), 50 >>> *z_unit_vector()),naivert.Material.DiffusionMaterial_Red_1(),reverse_normal=False)
>>> main_scene.add_cph(Sphere(Point(70,90,20),20,30,15),naivert.Material.SpecularMaterial_White_1(),>>> reverse_normal=False)
>>> main_scene.add_cph(Sphere(Point(120,60,20),20,30,15),naivert.Material.DiffusionMaterial_White_1(),>>> reverse_normal=False)
>>> main_scene.add_cph(Cone(Point(30,130,0),10,80*z_unit_vector(),n=30),material=naivert.Material.>>> DiffusionMaterial_Green_1(),reverse_normal=False)
>>> main_scene.add_cph(Cylinder(Point(30,70,0),15,80*z_unit_vector(),n=30),material=naivert.Material.>>> DiffusionMaterial_Blue_1(),reverse_normal=False)
>>> r = Renderer()
>>> for face in main_scene.face_list:
...     r.add((face.cpg,'r',1))
>>> r.show()
>>> main_scene.render_scene(32)
>>> main_scene.write_scene()
_images/sample3.png

Example 2

Simply run the code below after installation:

>>> import naivert
>>> from Geometry3D import *
>>> from math import sqrt
>>>
>>> main_scene = naivert.Scene()
>>>
>>> main_camera = naivert.Camera(Point(350,-250,350),Point(335,-235,335),10 * Vector(-1 /sqrt(6),1/sqrt(6),2/sqrt(6)),10*Vector(1/sqrt(2),1/sqrt(2),0),'main_camera.png',resolution=(600,600))
>>> point_light2 = naivert.PointLight(Point(200,50,200),[4.0,4.0,4.0])
>>> point_light = naivert.PointLight(Point(50,100,200),[5.0,5.0,5.0])
>>> main_scene.add_camera(main_camera)
>>> main_scene.add_light(point_light)
>>> main_scene.add_light(point_light2)
>>>
>>> main_scene.add_floor(-50,200,-50,200)
>>>
>>> main_scene.add_cph(Sphere(Point(0,0,15),15,30,15),naivert.Material.DiffusionMaterial_White_1(),reverse_normal=False)
>>> main_scene.add_cph(Sphere(Point(100,0,15),15,30,15),naivert.Material.DiffusionMaterial_Green_1(),reverse_normal=False)
>>> main_scene.add_cph(Sphere(Point(100,100,15),15,30,15),naivert.Material.DiffusionMaterial_Red_1(),reverse_normal=False)
>>> main_scene.add_cph(Sphere(Point(0,100,15),15,30,15),naivert.Material.DiffusionMaterial_Blue_1(),reverse_normal=False)
>>> main_scene.add_cph(Sphere(Point(50,0,15),15,30,15),naivert.Material.SpecularMaterial_White_1(),reverse_normal=False)
>>> main_scene.add_cph(Sphere(Point(0,50,15),15,30,15),naivert.Material.SpecularMaterial_White_1(),reverse_normal=False)
>>> main_scene.add_cph(Sphere(Point(50,100,15),15,30,15),naivert.Material.SpecularMaterial_White_1(),reverse_normal=False)
>>> main_scene.add_cph(Sphere(Point(100,50,15),15,30,15),naivert.Material.SpecularMaterial_White_1(),reverse_normal=False)
>>> main_scene.add_cph(Sphere(Point(50,50,15),15,30,15),naivert.Material.Glass(),reverse_normal=False)
>>>
>>> main_scene.render_scene(56)
>>>
>>> main_scene.write_scene()
_images/sample4.png

Example 3

Simply run the code below after installation:

>>> import naivert
>>> from Geometry3D import *
>>> from math import sqrt
>>> import copy
>>>
>>> main_scene = naivert.Scene()
>>> main_camera = naivert.Camera(Point(400,-300,400),Point(385,-285,385),10 * Vector(-1 /sqrt(6),1/sqrt(6),2/sqrt(6)),10*Vector(1/sqrt(2),1/sqrt(2),0),'main_camera.png',resolution=(15,15))
>>> point_light = naivert.PointLight(Point(50,100,200),[5.0,5.0,5.0])
>>> point_light2 = naivert.PointLight(Point(200,50,200),[4.0,4.0,4.0])
>>> ambient_light = naivert.AmbientLight([3.0,3.0,3.0])
>>> main_scene.add_camera(main_camera)
>>> main_scene.add_light(point_light)
>>> main_scene.add_light(point_light2)
>>> main_scene.add_light(ambient_light)
>>> main_scene.add_floor(-50,200,-50,200)
>>> main_scene.add_cph(Parallelepiped(Point(-51,-50,0),1*x_unit_vector(),200*y_unit_vector(),200*z_unit_vector()),naivert.Material.SpecularMaterial_White_1(),reverse_normal=False)
>>>
>>> main_scene.add_cph(Parallelepiped(Point(-50,150,0),200*x_unit_vector(),1*y_unit_vector(),200*z_unit_vector()),naivert.Material.SpecularMaterial_White_1(),reverse_normal=False)
>>>
>>> a = Point(50,0,0)
>>> b = Point(80,40,0)
>>> c = Point(76,43,0)
>>> d = Point(38,9,0)
>>> a1 = Point(50,0,80)
>>> b1 = Point(80,40,80)
>>> c1 = Point(76,43,80)
>>> d1 = Point(38,9,80)
>>> cpg1 = ConvexPolygon((a,b,c,d))
>>> cpg2 = ConvexPolygon((a1,b1,c1,d1))
>>> cpg3 = ConvexPolygon((a,b,b1,a1))
>>> cpg4 = ConvexPolygon((b,c,c1,b1))
>>> cpg5 = ConvexPolygon((c,d,d1,c1))
>>> cpg6 = ConvexPolygon((d,a,a1,d1))
>>> cph = ConvexPolyhedron((cpg1,cpg2,cpg3,cpg4,cpg5,cpg6))
>>> main_scene.add_cph(cph,naivert.Material.Glass(),reverse_normal=False)
>>>
>>> main_scene.add_cph(Parallelepiped(Point(10,10,0),20*x_unit_vector(),20*y_unit_vector(), 50 *z_unit_vector()),naivert.Material.DiffusionMaterial_Red_1(),reverse_normal=False)
>>> main_scene.add_cph(Sphere(Point(70,90,20),20,30,15),naivert.Material.SpecularMaterial_White_1(),reverse_normal=False)
>>> main_scene.add_cph(Sphere(Point(120,60,20),20,30,15),naivert.Material.DiffusionMaterial_White_1(),reverse_normal=False)
>>> main_scene.add_cph(Cone(Point(30,130,0),10,80*z_unit_vector(),n=30),material=naivert.Material.DiffusionMaterial_Green_1(),reverse_normal=False)
>>> main_scene.add_cph(Cylinder(Point(30,70,0),15,80*z_unit_vector(),n=30),material=naivert.Material.DiffusionMaterial_Blue_1(),reverse_normal=False)
>>>
>>> main_scene.render_scene(48)
>>> main_scene.write_scene()
_images/sample5.png

Python API

naivert.camera package

Submodules

naivert.camera.camera module

Module contents

naivert.geometry package

Submodules

naivert.geometry.face module

naivert.geometry.get_reflection_halfline module

naivert.geometry.get_refraction_halfline module

naivert.geometry.get_tangential_vector module

naivert.geometry.inter_halfline_face_list module

Module contents

naivert.light package

Submodules

naivert.light.light module

Module contents

naivert.material package

Submodules

naivert.material.material module

Module contents

naivert.scene package

Submodules

naivert.scene.scene module

Module contents

Indices and tables