Links und Funktionen
Sprachumschaltung

Navigationspfad
Sie sind hier: Startseite / Probestudium / 2011 / WS I: 3D-Programmierung / Skripte / donut_drehend.py


Inhaltsbereich

donut_drehend.py

Ein drehender Donut, bestehend aus zwei Ringen, kann mit Mausklick garniert werden. Ein Skriptparameter kontrolliert die maximale Streuselanzahl.

donut_drehend.py — text/python-source, 1 KB (1854 bytes)

Dateiinhalt

# -*- coding: utf-8 -*-
# 3D-Donut

# Einbinden der Module: 3D, Zufall, System (argumentvektor)

from visual import *
from random import random
from sys    import argv

# Abfrage Argumentvektor, ansonsten Standard einsetzen
if len(argv) > 1:
    maxstreusel = int(argv[1]) # String wird in int umgewandelt!
else:
    maxstreusel = 20

# Fenstertitel, Kameraposition, Stereodarstellung
scene.title = "Streusel auf den Donut!"
scene.forward = (0,-.5,-1)
#scene.stereo = "redcyan"

# Teig und Glasur werden im Rahmen donut gefangen
donut = frame()
teig = ring(thickness=0.55, color=(.9,.8,.2), axis=(0,1,0), frame=donut)
glasur= ring(thickness=0.56, color=(.3,.2,.1),\
             material=materials.plastic, y=0.1, axis=(0,1,0), frame=donut)

# Konstanten
winkel=0.5
streuselzahl=0

# Streuselverbrauch
anzeige = label(pos=donut.pos, text="Streuselverbrauch", \
               box=False, line=False, yoffset=150, height=10)


while streuselzahl < maxstreusel:
    # max. 50 Bilder pro Sekunde
    rate(50)
    # Rotation des Frames um y-Achse um 'winkel' pro Bild
    donut.rotate(angle=radians(winkel), axis=(0,1,0))
    # Abgfrage: Maus-Event ereignet?
    if scene.mouse.events:
        # Maus-Event in Variable speichern
        sme = scene.mouse.getevent()
        # Verarbeitung des Maus-Events: Maus über Glasur und Taste gedrückt?
        if sme.pick == glasur and sme.press:
            # Streuselprotokoll
            streuselzahl += 1
            # erzeuge Streusel relativ zu 'donut'
            sphere(pos=donut.world_to_frame(sme.pickpos), color=color.hsv_to_rgb((random(),1,1)), \
                   radius=0.05, material=materials.plastic, frame=donut)   
            anzeige.text="Verbrauch: "+str(streuselzahl)+" Streusel"
            print streuselzahl,

# Mögliche weitere Aufgaben:
# Rotationsrichtung per Pfeiltasten ändern
#...

Funktionsleiste