demos/dragon.py
branchpyrit
changeset 29 574c34441a1c
parent 28 ffe83ca074f3
child 60 a23b5089b9c3
equal deleted inserted replaced
28:ffe83ca074f3 29:574c34441a1c
     5 
     5 
     6 import sys
     6 import sys
     7 sys.path.append(open('ModulePath').read().strip())
     7 sys.path.append(open('ModulePath').read().strip())
     8 
     8 
     9 from raytracer import Raytracer, Light, Sphere, Triangle, Material
     9 from raytracer import Raytracer, Light, Sphere, Triangle, Material
       
    10 from plyreader import LoadStanfordPlyFile
    10 import Image
    11 import Image
    11 
       
    12 def LoadStanfordPlyFile(rt, mat, filename, scale):
       
    13 	vertices = []
       
    14 	fp = file(filename)
       
    15 	# read header
       
    16 	tokens = (0,)
       
    17 	while (tokens[0] != "end_header"):
       
    18 		tokens = fp.readline().split()
       
    19 		if (tokens[0] == "element"):
       
    20 			if (tokens[1] == "vertex"):
       
    21 				vertex_num = int(tokens[2])
       
    22 			if (tokens[1] == "face"):
       
    23 				face_num = int(tokens[2])
       
    24 
       
    25 	# read vertices
       
    26 	while (vertex_num):
       
    27 		tokens = fp.readline().split()
       
    28 		v = [scale*float(x) for x in tokens[0:3]]
       
    29 		v[0] = -v[0]
       
    30 		v[1] = v[1]-3.6
       
    31 		v[2] = -v[2]
       
    32 		vertices.append(tuple(v))
       
    33 		vertex_num -= 1
       
    34 
       
    35 	# read faces
       
    36 	while (face_num):
       
    37 		tokens = fp.readline().split()
       
    38 		if (tokens[0] != "3"):
       
    39 			print "ply warning: faces of %d vertices not supported" % tokens[0]
       
    40 		f = [vertices[int(x)] for x in tokens[1:4]]
       
    41 		face = Triangle(NormalVertex(f[0]), NormalVertex(f[1]), NormalVertex(f[2]), mat)
       
    42 		rt.addshape(face)
       
    43 		face_num -= 1
       
    44 
    12 
    45 rt = Raytracer()
    13 rt = Raytracer()
    46 mat = Material(colour=(0.9, 0.9, 0.9))
    14 mat = Material(colour=(0.9, 0.9, 0.9))
    47 LoadStanfordPlyFile(rt, mat, "../models/dragon/dragon_vrip_res2.ply", 29.0)
    15 LoadStanfordPlyFile(rt, "../models/dragon/dragon_vrip_res2.ply",
       
    16 	mat, smooth=True, scale=(-29.0, 29.0, -29.0), trans=(0.0, -3.6, 0.0))
    48 
    17 
    49 light1 = Light(position=(-5.0, 2.0, 8.0), colour=(0.9, 0.3, 0.2))
    18 light1 = Light(position=(-5.0, 2.0, 8.0), colour=(0.9, 0.3, 0.2))
    50 rt.addlight(light1)
    19 rt.addlight(light1)
    51 
    20 
    52 light2 = Light(position=(3.0, 0.0, 9.0), colour=(0.0, 1.0, 0.2))
    21 light2 = Light(position=(3.0, 0.0, 9.0), colour=(0.0, 1.0, 0.2))