import math import random def setRandomValue(min,max): return (random.random()*(max - min))+min def setColor(bodyString): r = setRandomValue(1,1) g = setRandomValue(0,.5) b = setRandomValue(.5,1) bodyString += '\tAttributeBegin\n' bodyString += '\t\tColor %g %g %g\n' % (r,g,b) return bodyString def setSphereRand(radious,centerDensity,id,maxNum): theta = ((math.pi*2.0)/maxNum) * id m = 0 while(m < centerDensity): radious = setRandomValue(0,radious) m += 1 x = math.sin(theta) * radious y = math.cos(theta) * radious z = math.sin(theta) * radious return [x, y, z] def setGroupATransform(bodyString,n,numOfObjects): groupWidth = 1000 centerDensity = 2 rotationMax = 360 scaleMax = 5 scaleMin = .1 #translate tx = setSphereRand(groupWidth,centerDensity,n,numOfObjects)[0] ty = setSphereRand(groupWidth,2,n,numOfObjects)[1] tz = setSphereRand(groupWidth,centerDensity,n,numOfObjects)[2] #rotation rx = setRandomValue(-rotationMax,rotationMax) ry = setRandomValue(-rotationMax,rotationMax) rz = setRandomValue(-rotationMax,rotationMax) #scale scale = setRandomValue(scaleMin,setRandomValue(scaleMin,setRandomValue(scaleMin,scaleMax))) bodyString += 'Translate %g %g %g' % (tx,ty,tz) bodyString += 'Scale %g %g %g' % (scale,scale,scale) bodyString += 'Rotate %g 1 0 0' % rx bodyString += 'Rotate %g 0 1 0' % ry bodyString += 'Rotate %g 0 0 1' % rz return bodyString def setGridTransform(bodyString,id): numOfXrow = 1.0 bodyString += '\tTransformBegin\n' spaceDistance = 40 tx = ((spaceDistance*2/numOfXrow) * id) -(spaceDistance/2) bodyString += '\t\tTranslate %g 0 0\n' % tx return bodyString def setTransform(bodyString): bodyString += '\tTransformBegin\n' #position spaceDistance = 0 tx = setRandomValue(-spaceDistance,spaceDistance) ty = setRandomValue(-spaceDistance,spaceDistance) tz = setRandomValue(-spaceDistance,spaceDistance) bodyString += '\t\tTranslate %g %g %g\n' % (tx, ty, tz) #rotation ramdomRotation = 0 rx = setRandomValue(-ramdomRotation,ramdomRotation) ry = setRandomValue(-ramdomRotation,ramdomRotation) rz = setRandomValue(-ramdomRotation,ramdomRotation) bodyString += '\t\tRotate %g 1 0 0\n' % rx bodyString += '\t\tRotate %g 0 1 0\n' % ry bodyString += '\t\tRotate %g 0 0 1\n' % rz return bodyString def makeWorld(): imageFileName = 'world.tif' worldRibFileName = 'world.rib' configurationString = """ Option "searchpath" "shader" "@:../shaders" Option "searchpath" "texture" "../textures" Option "searchpath" "archive" "./objects" Display "%s" "it" "rgba" Format 640 480 1 #LightSource "distantlight" 1 "intensity" 1.5 "from" [0 0 0] "to" [0 0 1] ReadArchive "camera_03.rib" WorldBegin ReverseOrientation #LightSource "distantlight" 1 "intensity" 3 "from" [1 0 0] "to" [0 0 0] #LightSource "distantlight" 1 "intensity" .7 "from" [0 1 0] "to" [0 0 0] #LightSource "distantlight" 1 "intensity" .7 "from" [0 0 1] "to" [0 0 0] #ReadArchive "lights.rib" ReadArchive "lights_03.rib" Surface "plastic" """ % imageFileName bodyString = '\n' numOfObjects = 700; n = 0 while(n < numOfObjects): objectRibFileName = 'objectProgress_step8.%04d.rib' % (math.floor(setRandomValue(0,200))) bodyString = setGroupATransform(bodyString,n,numOfObjects) bodyString += '\t\tReadArchive "%s"\n' % objectRibFileName bodyString += '\tTransformEnd\n' n += 1 file = open(worldRibFileName, 'w') file.write(configurationString) file.write(bodyString) file.write('WorldEnd\n') file.close() random.seed(5) makeWorld()