#!/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