#!/usr/bin/wish # Einfaches Beispiel für Tcl3d, basiert auf dem # OpenGL-Tutorial von http://nehe.gamedev.net # Suchpfad erweitern wenn notwendig: #lappend auto_path /home/cz/tcl3d0.3 package require tcl3d 0.2 # Setzt ein paar Startwerte, wird beim Erzeugen des Fensters augerufen proc tclCreateFunc {toglwin} { glShadeModel GL_SMOOTH ;# sanfte Farbübergänge glClearColor 0.1 0.7 1 0.5 ;# Hintergrundfarbe } # Diese Funktion baut das 3D-Modell und zeigt es an proc tclDisplayFunc {toglwin} { # Farben- und Tiefenspeicher löschen glClear [expr {$::GL_COLOR_BUFFER_BIT | $::GL_DEPTH_BUFFER_BIT}] # Anfangsposition setzen glLoadIdentity glTranslatef -1.5 0.0 -10.0 # Ein rotes Dreieck zeichnen glColor3f 1 1 0 glBegin GL_TRIANGLES glVertex3f 0.0 1.0 0.0 glVertex3f -1.0 -1.0 0.0 glVertex3f 1.0 -1.0 0.0 glEnd # Ein Viereck zeichnen mit unterschiedlich gefärbten Ecken glTranslatef 3.0 0.0 0.0 ;# Auf neuen Start glBegin GL_QUADS glColor3f 1.0 0.0 0.0 ;# Erste Ecke rot glVertex3f -1.0 1.0 0.0 glColor3f 0.0 1.0 0.0 ;# Zweite Ecke grün glVertex3f 1.0 1.0 0.0 glColor3f 0.0 0.0 1.0 ;# Dritte Ecke blau glVertex3f 1.0 -1.0 0.0 glColor3f 1.0 1.0 1.0 ;# Dritte Ecke weiß glVertex3f -1.0 -1.0 0.0 glEnd # Neues Model anzeigen $toglwin swapbuffers } # Berechnet eine passende Ansicht auf das Model, # wird aufgerufen wenn sich die Fenstergröße ändert proc tclReshapeFunc {toglwin b h} { # verhindert Teilen durch Null set h [expr {$h<1 ? 1 : $h}] # Viewport setzen glViewport 0 0 $b $h glMatrixMode GL_PROJECTION glLoadIdentity # Perspektive berechnen lassen und aktiv machen set winkel 46 set verhaeltnis [expr {double($b)/double($h)}] set von 0.1 set bis 100.0 gluPerspective $winkel $verhaeltnis $von $bis glMatrixMode GL_MODELVIEW } # Fenster aufbauen togl .toglwin -width 640 -height 480 -double true \ -createproc tclCreateFunc \ -reshapeproc tclReshapeFunc \ -displayproc tclDisplayFunc pack .toglwin -expand 1 -fill both