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