diff --git a/punyverse/assets/models/asteroids/mainbelt.mtl b/punyverse/assets/models/asteroids/mainbelt.mtl index d4b557e..ef91812 100644 --- a/punyverse/assets/models/asteroids/mainbelt.mtl +++ b/punyverse/assets/models/asteroids/mainbelt.mtl @@ -1,11 +1,11 @@ -# Blender MTL File: 'mainbeltastroid.blend' +# Blender MTL File: 'None' # Material Count: 1 newmtl Material -Ns 96.078431 +Ns 92.156863 Ka 0.000000 0.000000 0.000000 -Kd 0.254837 0.254837 0.254837 -Ks 0.159273 0.159273 0.159273 +Kd 0.389517 0.389517 0.389517 +Ks 0.303197 0.303197 0.303197 Ni 1.000000 d 1.000000 illum 2 diff --git a/punyverse/assets/models/asteroids/mainbelt2.obj b/punyverse/assets/models/asteroids/mainbelt2.obj new file mode 100644 index 0000000..2663435 --- /dev/null +++ b/punyverse/assets/models/asteroids/mainbelt2.obj @@ -0,0 +1,103 @@ +# Blender v2.66 (sub 1) OBJ File: '' +# www.blender.org +mtllib mainbelt.mtl +g Cube.002 +v -0.289079 -0.829861 0.215310 +v 0.057641 -0.817976 -0.343786 +v 0.543391 -0.663372 0.025647 +v -0.097897 -0.384127 -0.766643 +v 0.545964 -0.487153 -0.565775 +v 0.504985 -0.681732 0.425810 +v 0.124050 -0.113115 0.938530 +v -0.706349 -0.467985 0.350889 +v -0.654122 -0.523922 -0.388949 +v 0.176965 0.828195 -0.359842 +v -0.383487 0.292923 -0.693979 +v -0.738214 0.373419 -0.411660 +v -0.714335 0.466863 0.124949 +v -0.398389 0.720367 0.469422 +v 0.451232 0.721178 0.355306 +v 0.882521 0.137464 -0.019655 +v 0.520709 0.162782 -0.672326 +v 0.692252 0.151771 0.606789 +v 0.088118 0.461316 0.717918 +v -0.701579 0.121702 0.577301 +v 0.132479 0.283880 -0.909159 +vn 0.220116 -0.968562 0.115914 +vn 0.121188 -0.670211 -0.732209 +vn 0.190171 -0.981386 -0.026776 +vn -0.062026 -0.690971 0.720217 +vn -0.653070 -0.757215 0.011149 +vn -0.323725 0.721233 -0.612393 +vn -0.462979 0.861322 -0.209224 +vn 0.018021 0.989816 0.141208 +vn 0.872936 -0.045704 -0.485690 +vn 0.912617 -0.392863 -0.113086 +vn 0.731293 0.657305 -0.182098 +vn 0.733716 0.559838 -0.385022 +vn 0.919930 -0.268686 0.285545 +vn 0.580622 -0.295204 0.758771 +vn 0.400075 0.506643 0.763710 +vn -0.295046 0.312154 0.903055 +vn -0.794843 0.471399 0.382109 +vn -0.998990 0.017376 0.041429 +vn -0.999351 -0.005584 0.035599 +vn -0.993512 -0.094698 -0.062975 +vn -0.266191 0.695397 -0.667507 +vn 0.273402 -0.145262 -0.950868 +vn -0.385081 -0.063621 -0.920687 +vn 0.461921 -0.850540 -0.251416 +vn -0.256648 -0.720214 -0.644534 +vn -0.357494 -0.902317 -0.240879 +vn 0.550017 0.570541 -0.609888 +vn -0.434722 0.890284 -0.135687 +vn 0.084553 0.767893 0.634973 +vn 0.848402 0.468199 0.246991 +vn 0.919967 -0.385585 0.070604 +vn 0.342132 0.355460 0.869824 +vn -0.299721 0.325644 0.896730 +vn -0.275650 -0.599397 0.751492 +vn -0.454304 -0.316110 0.832876 +vn -0.547764 -0.072427 -0.833492 +vn 0.416633 -0.324827 -0.849061 +vn -0.637398 -0.188684 -0.747076 +usemtl Material +s off +f 1//1 2//1 3//1 +f 4//2 5//2 2//2 +f 6//3 1//3 3//3 +f 7//4 1//4 6//4 +f 1//5 8//5 9//5 +f 10//6 11//6 12//6 +f 10//7 13//7 14//7 +f 10//8 14//8 15//8 +f 16//9 5//9 17//9 +f 3//10 5//10 16//10 +f 16//11 10//11 15//11 +f 16//12 17//12 10//12 +f 16//13 18//13 6//13 +f 7//14 6//14 18//14 +f 19//15 18//15 15//15 +f 19//16 14//16 20//16 +f 20//17 14//17 13//17 +f 20//18 13//18 12//18 +f 20//19 12//19 8//19 +f 12//20 9//20 8//20 +f 11//21 10//21 21//21 +f 17//22 5//22 4//22 +f 21//23 4//23 11//23 +f 3//24 2//24 5//24 +f 2//25 9//25 4//25 +f 2//26 1//26 9//26 +f 21//27 10//27 17//27 +f 13//28 10//28 12//28 +f 15//29 14//29 19//29 +f 18//30 16//30 15//30 +f 3//31 16//31 6//31 +f 7//32 18//32 19//32 +f 20//33 7//33 19//33 +f 1//34 7//34 8//34 +f 7//35 20//35 8//35 +f 9//36 12//36 4//36 +f 4//37 21//37 17//37 +f 11//38 4//38 12//38 diff --git a/punyverse/glgeom.py b/punyverse/glgeom.py index c3632f9..921ee12 100644 --- a/punyverse/glgeom.py +++ b/punyverse/glgeom.py @@ -1,6 +1,6 @@ from math import * from pyglet.gl import * -from random import random, uniform +from random import random, uniform, gauss, choice TWOPI = pi * 2 @@ -163,19 +163,16 @@ def colourball(r, lats, longs, colour, fv4=GLfloat * 4): def belt(radius, cross, object, count): for i in xrange(count): theta = TWOPI * random() - x, y, z = cos(theta) * radius, 0, sin(theta) * radius - # Pretend to move horizontally around the x-axis by delta - # then I multiply it by a rotation matrix about angle theta - # the z-axis need not to be multiplied by the matrix, as it's 0 - # Do note the rotation is counter clockwise - delta = cross * uniform(-1, 1) - x += cos(theta) * delta - z += sin(theta) * delta - y += cross * uniform(-1, 1) + r = gauss(radius, cross) + x, y, z = cos(theta) * r, gauss(0, cross), sin(theta) * r glPushMatrix() glTranslatef(x, y, z) - glCallList(object) + scale = gauss(1, 0.5) + if scale < 0: + scale = 1 + glScalef(scale, scale, scale) + glCallList(choice(object)) glPopMatrix() diff --git a/punyverse/world.json b/punyverse/world.json index 1a2c88f..13947db 100644 --- a/punyverse/world.json +++ b/punyverse/world.json @@ -288,11 +288,11 @@ }, "belts": { "main": { - "model": "asteroids/mainbelt.obj", + "model": ["asteroids/mainbelt.obj", "asteroids/mainbelt2.obj"], "radius": "2.362 * AU", "cross": 1000, "scale": 30, - "count": 1024, + "count": 2048, "rotation": 114536500 } }, diff --git a/punyverse/world.py b/punyverse/world.py index deb4e57..fa5def2 100644 --- a/punyverse/world.py +++ b/punyverse/world.py @@ -201,10 +201,15 @@ def load_world(file): rotation = info.get('period', 31536000) theta = 360 / (rotation + .0) if rotation else 0 - object_id = model_list(load_model(info['model']), info.get('sx', scale), info.get('sy', scale), - info.get('sz', scale), (0, 0, 0)) + models = info['model'] + if not isinstance(models, list): + models = [models] + objects = [] + for model in models: + objects.append(model_list(load_model(model), info.get('sx', scale), info.get('sy', scale), + info.get('sz', scale), (0, 0, 0))) - world.tracker.append(Belt(compile(belt, radius, cross, object_id, count), + world.tracker.append(Belt(compile(belt, radius, cross, objects, count), (x, y, z), (inclination, longitude, argument), rotation_angle=theta, world=world))