|      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)) |