# # gen_stars.py # interface # # Created by Tobias Schwinger on 3/22/13. # Copyright (c) 2013 High Fidelity, Inc. All rights reserved. # # Input file generator for the starfield. from random import random,randint from math import sqrt, hypot, atan2, pi, fmod, degrees from sys import argv,stderr hemisphere_only, equator, meridians= False, 1000, 1000 n_random = 100000 if len(argv) > 1: n_random = int(argv[1]) bars_total, bars_prev = 77, 0 def meridian(azimuth,n,(r0,g0,b0),(r1,g1,b1)): alts = 180.0/n for alti in range(n): # color altj = n-alti-1 r = (r0 *altj+alti* r1)/n g = (g0 *altj+alti* g1)/n b = (b0 *altj+alti* b1)/n # position altitude = alts*alti print "%f %f #%02x%02x%02x" % (azimuth,altitude,r,g,b) print "%f %f #%02x%02x%02x" % (azimuth,-altitude,r,g,b) if meridians: meridian( 0,meridians,(255,255,255), (180, 60,255)) # N->S meridian(90,meridians,( 80,255, 80), (255,240, 40)) # E->W if equator: azis = 360.0/equator for azii in range(equator): azimuth = azis*azii print "%f %f #%02x%02x%02x" % (azimuth,0,255,255,255) for i in range(n_random): # color w = randint(30,randint(40,255)) r = max(0,min(255,w + randint(-10,70))) g = max(0,min(255,w + randint(-20,60))) b = max(0,min(255,w + randint(-10,100))) # position x,y,z = random()*2-1,random(),random()*2-1 if not hemisphere_only: y = y*2-1 l = sqrt(x*x + y*y + z*z) x /= l; y /= l; z /= l xz = hypot(x,z) azimuth = degrees(fmod(atan2(x,z)+pi,2*pi)) altitude = degrees(atan2(y,xz)) bars = round(bars_total*i/n_random) if bars != bars_prev: bars_prev = bars bars = int(bars) stderr.write('\r[%s%s]' % ('#' * bars, '-' * (bars_total-bars))) print "%f %f #%02x%02x%02x" % (azimuth,altitude,r,g,b) stderr.write('\r[%s]\n' % ('#' * bars_total,))