Links und Funktionen
Sprachumschaltung

Navigationspfad


Inhaltsbereich

rotate_scene.py

rotate_scene.py — text/python-source, 1 KB (1593 bytes)

Dateiinhalt

from visual import *
# This routine watches scene.forward and changes the directions of
# the lights to stay fixed with respect to scene.forward.
# The effect is to let the user rotate the scene while keeping
# the lights fixed, as though one were rotating an object in the
# hand to examine it, with fixed lighting, rather than rotating
# the camera.

# To compare, comment out the while loop, in which case you'll see
# that when you rotate around to the back of the scene, it is dark.

# This requires Visual 5. A similar routine in Visual 3 would be
# somewhat more complicated because the lights were not objects
# and so could not be put in a frame. Instead, one would have to
# adjust the directions of the lights individually.

# Bruce Sherwood, May 2009
scene.material = materials.wood # default material for all objects
box(pos=(-2,0,0), color=color.red)
a = box(pos=(2,0,0), color=color.green, material=materials.marble)
cylinder(pos=(0,-0.5,0), radius=1, axis=(0,1,0), color=color.orange)
s = sphere(pos=(-2,0.8,0), radius=0.3, color=color.cyan,
           material=materials.emissive)
local_light(pos=s.pos, color=s.color)

lframe = frame()
for obj in scene.lights:
    if isinstance(obj, distant_light):
        obj.frame = lframe # put distant lights in a frame
old = vector(scene.forward) # keep a copy of the old forward
while 1:
    rate(50)
    if scene.forward != old:
        new = scene.forward
        axis = cross(old,new)
        angle = new.diff_angle(old)
        lframe.rotate(axis=axis, angle=angle)
        old = vector(new)

Funktionsleiste