1 #!/usr/bin/env python 2 3 """ 4 An example scene from... 5 6 http://www.pawfal.org/index.php?page=PyGmy 7 """ 8 9 import math 10 # Choose one of the ppygmy imports: 11 from ppygmy import * 12 #from ppygmy_pmap import * 13 #from ppygmy_queue import * 14 import sys 15 16 class everythingshader(shader): 17 def __init__(self): 18 pass 19 20 def shade(self,shaderinfo): 21 col = shader.shade(self,shaderinfo) 22 ref = self.getreflected(shaderinfo) 23 col = col*0.5+ref*0.5 24 return col*self.doocclusion(10,shaderinfo) 25 26 class spotshader(shader): 27 def __init__(self): 28 pass 29 30 def shade(self,shaderinfo): 31 col = shader.shade(self,shaderinfo) 32 position=shaderinfo["position"] 33 jitter=(math.sin(position.x)+math.cos(position.z)) 34 if jitter>0.5: col=col/2 35 ref = self.getreflected(shaderinfo) 36 return ref*0.5+col*0.5*self.doocclusion(10,shaderinfo) 37 38 if __name__ == "__main__": 39 w = world(300,200) 40 numballs=10.0 41 offset = vec(0,-5,55) 42 rad=12.0 43 radperball=(2*3.141)/numballs 44 45 for i in range(0,int(numballs)): 46 x=sin(0.3+radperball*float(i))*rad 47 y=cos(0.3+radperball*float(i))*rad 48 w.objects.append(sphere(vec(x,0,y)+offset,2,everythingshader())) 49 50 w.objects.append(sphere(vec(3,3,0)+offset,5,everythingshader())) 51 w.objects.append(plane(vec(0,1,0),7,spotshader())) 52 w.lights.append(parallellight(vec(1,1,-1),vec(0.3,0.9,0.1))) 53 w.lights.append(pointlight(vec(5,100,-5),vec(0.5,0.5,1))) 54 55 if len(sys.argv) > 1: 56 if "--help" in sys.argv: 57 print "Specify a limit to the number of processes." 58 print "For example:" 59 print "python", sys.argv[0], "4" 60 sys.exit(1) 61 else: 62 limit = int(sys.argv[1]) 63 else: 64 limit = 1 65 66 print "Number of processes:", limit 67 w.render("test.tif", limit) 68 69 # vim: tabstop=4 expandtab shiftwidth=4