#!/bin/sh # Einfaches Beispiel für Tcl3d, basiert # auf OpenGL Tutorial von http://nehe.gamedev.net # \ exec wish $0 $@ # 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 } # In dieser Funktion wird das 3D Modell gebaut # und angezeigt 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 unterschiedlichen # Farben auf den 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 } # # Aufbau des Fensters # togl .toglwin -width 640 -height 480 \ -double true \ -createproc tclCreateFunc \ -reshapeproc tclReshapeFunc \ -displayproc tclDisplayFunc pack .toglwin -expand 1 -fill both