##############################################################
# spindots
Andy Beall 1998
#
# This script demonstrates on-the-fly geometry of a sphere
# and a wire-frame box the surround it. The sphere spins,
and
# you can optionally add the box. The sphere always goes
in
# the same direction but the box goes either 'f'ordward or
# 'r'everse depending on which key you press.
#
##############################################################
##############################################################
import vrut
import math
import whrandom
import win32api
vrut.go()
NUM_DOTS = 350
RADIUS = 1
vrut.clearcolor(0, 0, 0)
angle = 0
cubeAngle = 0
SPEED = 1
cubeSpeed = 0
print "\n***************************************"
print "Press 'f' or 'r' to see a cube spinning"
print "along with the sphere."
print "\n***************************************"
#Build sphere
vrut.startlayer(vrut.POINTS)
vrut.vertexcolor(1,1,1)
vrut.pointsize(2)
for i in range(0, NUM_DOTS):
x = whrandom.random() - 0.5
y = whrandom.random() - 0.5
z = whrandom.random() - 0.5
length = math.sqrt(x*x + y*y + z*z)
x = x / length * RADIUS
y = y / length * RADIUS + 1.8
z = z / length * RADIUS
vrut.vertex(x, y, z)
vrut.endlayer()
#Build cube
vrut.startlayer(vrut.LINE_STRIP)
vrut.vertexcolor(0, .6, 0)
vrut.vertex(-RADIUS, -RADIUS, -RADIUS)
vrut.vertex(-RADIUS, -RADIUS, RADIUS)
vrut.vertex( RADIUS, -RADIUS, RADIUS)
vrut.vertex( RADIUS, -RADIUS, -RADIUS)
vrut.vertex(-RADIUS, -RADIUS, -RADIUS)
vrut.vertex(-RADIUS, RADIUS, -RADIUS)
vrut.vertex(-RADIUS, RADIUS, RADIUS)
vrut.vertex( RADIUS, RADIUS, RADIUS)
vrut.vertex( RADIUS, RADIUS, -RADIUS)
vrut.vertex(-RADIUS, RADIUS, -RADIUS)
vrut.startlayer(vrut.LINES)
vrut.vertex(-RADIUS, -RADIUS, RADIUS)
vrut.vertex(-RADIUS, RADIUS, RADIUS)
vrut.vertex( RADIUS, -RADIUS, RADIUS)
vrut.vertex( RADIUS, RADIUS, RADIUS)
vrut.vertex( RADIUS, -RADIUS, -RADIUS)
vrut.vertex( RADIUS, RADIUS, -RADIUS)
vrut.endlayer()
vrut.translate(vrut.WORLD, 2, 0, 1.8, 4)
vrut.curtain(vrut.CLOSE, vrut.WORLD, 2)
###############################################
def mytimer(num):
global angle
global cubeAngle
global cubeSpeed
if num == 0:
vrut.reset(vrut.WORLD, 1)
vrut.translate(vrut.WORLD, 1, 0, 0, 4)
vrut.rotate(vrut.WORLD, 1, vrut.YAXIS, angle)
angle = angle + SPEED
vrut.starttimer(0, .001)
if cubeSpeed != 0:
vrut.reset(vrut.WORLD, 2)
vrut.translate(vrut.WORLD, 2, 0, 1.8, 4)
vrut.rotate(vrut.WORLD, 2, vrut.YAXIS, cubeAngle)
cubeAngle = cubeAngle + cubeSpeed
elif num == 2:
vrut.curtain(vrut.CLOSE, vrut.WORLD, 2)
cubeSpeed = 0
###############################################
def mykeyboard(key):
global cubeSpeed
if key == 'f':
cubeSpeed = SPEED
vrut.starttimer(2, 5)
vrut.curtain(vrut.OPEN, vrut.WORLD, 2)
if key == 'r':
cubeSpeed = -SPEED
vrut.starttimer(2, 5)
vrut.curtain(vrut.OPEN, vrut.WORLD, 2)
if key == 'p':
import foodlg
vrut.callback(vrut.KEYBOARD_EVENT, 'mykeyboard')
vrut.callback(vrut.TIMER_EVENT, 'mytimer')
vrut.starttimer(0, .5)