Skip to content
Snippets Groups Projects
Commit 796ba8a2 authored by Benjamin Koltes's avatar Benjamin Koltes
Browse files

triangles

parent 0021e603
No related branches found
No related tags found
No related merge requests found
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
from operation_vector import * from operation_vector import *
from scene import * from scene import *
from math import atan, pi
class Intersection: class Intersection:
def __init__(self, position, normal, object): def __init__(self, position, normal, object):
...@@ -35,7 +36,38 @@ def intersect(objet, ray): ...@@ -35,7 +36,38 @@ def intersect(objet, ray):
else: else:
return Intersection(position, -(position - centre).normalized(), objet) return Intersection(position, -(position - centre).normalized(), objet)
elif type(objet) is Triangle:
i = (objet.v1 - objet.v0).normalized()
j = (objet.v2 - objet.v0).normalized()
n = (i^j).normalized()
if l*n == 0:
return None
px = ((objet.v0 - o)*n)/(l*n)
p = o + px*l
if not(pointInTriangle(p, objet.v0, objet.v1, objet.v2)):
return None
normal = -n*((l*n)/abs(l*n))
return Intersection(p, normal, objet)
else:
print('c',end = ' ')
def sameSide(p1, p2, a,b):
cp1 = (b-a)^(p1-a)
cp2 = (b-a)^(p2-a)
if cp1*cp2 >= 0:
return True
else:
return False
def pointInTriangle(p, a, b, c):
if sameSide(p, a, b, c) and sameSide(p, b, a, c) and sameSide(p, c, a, b):
return True
else:
return False
...@@ -45,7 +45,7 @@ class Vector: ...@@ -45,7 +45,7 @@ class Vector:
return vector1 + (-1 * vector2) return vector1 + (-1 * vector2)
def __repr__(self): def __repr__(self):
return 'Vector' + str(self.coord()) return 'Vector(' + str(list(self.coord())) + ')'
def __str__(self): def __str__(self):
return '/ ' + str(self.x) + '\n| ' + str(self.y) + '\n\\ ' + str(self.z) + '\n' return '/ ' + str(self.x) + '\n| ' + str(self.y) + '\n\\ ' + str(self.z) + '\n'
......
...@@ -6,6 +6,13 @@ class Sphere: ...@@ -6,6 +6,13 @@ class Sphere:
self.radius = rayon self.radius = rayon
self.material = material self.material = material
class Triangle:
def __init__(self, v0, v1, v2, material):
self.v0 = v0
self.v1 = v1
self.v2 = v2
self.material = material
class Material: class Material:
def __init__(self, color, ambiant, diffuse, specular, shininess, reflection): def __init__(self, color, ambiant, diffuse, specular, shininess, reflection):
self.color = color self.color = color
......
File added
...@@ -14,21 +14,21 @@ materiau_sphere_rouge = Material(Vector((1,0,0)), .5, .3, .3, 100, .3) ...@@ -14,21 +14,21 @@ materiau_sphere_rouge = Material(Vector((1,0,0)), .5, .3, .3, 100, .3)
materiau_sphere_blanche = Material(Vector((1,1,1)), .5, .3, .3, 100, 0) materiau_sphere_blanche = Material(Vector((1,1,1)), .5, .3, .3, 100, 0)
materiau_sphere_verte= Material(Vector((0,1,0)), .5, .3, .3, 100, .3) materiau_sphere_verte= Material(Vector((0,1,0)), .5, .3, .3, 100, .3)
c = (8+2*(3**.5))**.5 c = (8+2*(3**.5))**.5
l = 0+0*((c**2 - 4)**.5) l = ((c**2 - 4)**.5)
v0 = Vector([0,0,2+l])
v1 = Vector([0,2,2+l])
v2 = Vector([2,0,2+l])
v3 = Vector([0,0,2]) v3 = Vector([0,0,2])
#triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge) v1 = Vector([2,0,4])
#triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte) v2 = Vector([-1,l,4])
#triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue) v0 = Vector([-1,-l,4])
triangle_blanc = Triangle(v0,v1,v2,materiau_sphere_blanche) triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge)
triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte)
triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue)
#triangle_blanc = Triangle(v0,v1,v2,materiau_sphere_blanche)
lumiere = Spotlight(Vector((1,1,0)), Vector((1,1,1))) lumiere = Spotlight(Vector((1,1,0)), Vector((1,1,1)))
scene = Scene() scene = Scene()
#scene.add_object(sphere_blanche) scene.add_object(triangle_vert)
#scene.add_object(triangle_bleu) scene.add_object(triangle_bleu)
#scene.add_object(triangle_rouge) scene.add_object(triangle_rouge)
scene.add_object(triangle_blanc) #scene.add_object(triangle_blanc)
scene.add_light(lumiere) scene.add_light(lumiere)
affiche = raytracer_render(camera, scene) affiche = raytracer_render(camera, scene)
imsave('try.png',affiche) imsave('try.png',affiche)
......
...@@ -25,18 +25,18 @@ c = (8+2*(3**.5))**.5 ...@@ -25,18 +25,18 @@ c = (8+2*(3**.5))**.5
l = (c**2 - 4)**.5 l = (c**2 - 4)**.5
v0 = Vector([0,2,2+l]) v0 = Vector([0,2,2+l])
v1 = Vector([3**.5,-1,2+l]) v1 = Vector([3**.5,-1,2+l])
v2 = Vector([3**.5,-1,2+l]) v2 = Vector([-3**.5,-1,2+l])
v3 = Vector([0,0,2]) v3 = Vector([0,0,2])
#triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge) triangle_rouge = Triangle(v0,v1,v3,materiau_sphere_rouge)
#triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte) triangle_vert = Triangle(v1,v2,v3,materiau_sphere_verte)
#triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue) triangle_bleu = Triangle(v0,v2,v3,materiau_sphere_bleue)
triangle_blanc = Triangle(v0,v2,v3,materiau_sphere_blanche) #triangle_blanc = Triangle(v0,v2,v3,materiau_sphere_blanche)
scene = Scene() scene = Scene()
lumiere = Spotlight(Vector([0,0,0]), Vector([1,1,1])) lumiere = Spotlight(Vector([0,0,0]), Vector([1,1,1]))
#scene.add_object(sphere_blanche) scene.add_object(triangle_vert)
#scene.add_object(triangle_bleu) scene.add_object(triangle_bleu)
#scene.add_object(triangle_rouge) scene.add_object(triangle_rouge)
scene.add_object(triangle_blanc) #scene.add_object(triangle_blanc)
scene.add_light(lumiere) scene.add_light(lumiere)
affiche = np.zeros((nx, ny, 3)) affiche = np.zeros((nx, ny, 3))
rows = list(range(nx)) rows = list(range(nx))
......
scripts/triangle.png

1.5 KiB

scripts/try.png

1.57 KiB | W: | H:

scripts/try.png

955 B | W: | H:

scripts/try.png
scripts/try.png
scripts/try.png
scripts/try.png
  • 2-up
  • Swipe
  • Onion skin
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment