can't find package tcl3d 0.5.0
    while executing
"package require tcl3d 0.5.0"
    (in namespace eval "::request" script line 11)
    invoked from within
"namespace eval ::request $script"
    ("::try" body line 12)

OUTPUT BUFFER:

# Lesson47.tcl # # NeHe & Owen Bourne's Cg Vertex Shader Tutorial # # If You've Found This Code Useful, Please Let Me Know. # Visit My Site At nehe.gamedev.net # # Modified for Tcl3D by Paul Obermeier 2006/09/05 # See www.tcl3d.org for the Tcl3D extension. package require tcl3d 0.5.0 # Font to be used in the Tk listbox. set gDemo(listFont) {-family {Courier} -size 10} # Determine the directory of this script. set gDemo(scriptDir) [file dirname [info script]] # Display mode. set gDemo(fullScreen) false # Window size. set gDemo(winWidth) 640 set gDemo(winHeight) 480 set TWO_PI 6.2831853071 ; # PI * 2 # User Defined Variables set SIZE 64 ; # Defines The Size Of The X/Z Axis Of The Mesh set cg_enable true ; # Toggle Cg Program On / Off set wave_movement 0.0 ; # Our Variable To Move The Waves Across The Mesh # Show errors occuring in the Togl callbacks. proc bgerror { msg } { tk_messageBox -icon error -type ok -message "Error: $msg\n\n$::errorInfo" ExitProg } # Print info message into widget a the bottom of the window. proc PrintInfo { msg } { if { [winfo exists .fr.info] } { .fr.info configure -text $msg } } proc SetFullScreenMode { win } { set sh [winfo screenheight $win] set sw [winfo screenwidth $win] wm minsize $win $sw $sh wm maxsize $win $sw $sh set fmtStr [format "%dx%d+0+0" $sw $sh] wm geometry $win $fmtStr wm overrideredirect $win 1 focus -force $win } proc SetWindowMode { win w h } { set sh [winfo screenheight $win] set sw [winfo screenwidth $win] wm minsize $win 10 10 wm maxsize $win $sw $sh set fmtStr [format "%dx%d+0+25" $w $h] wm geometry $win $fmtStr wm overrideredirect $win 0 focus -force $win } # Toggle between windowing and fullscreen mode. proc ToggleWindowMode {} { if { $::gDemo(fullScreen) } { SetFullScreenMode . set ::gDemo(fullScreen) false } else { SetWindowMode . $::gDemo(winWidth) $::gDemo(winHeight) set ::gDemo(fullScreen) true } } proc ToggleCg { toglwin } { set ::cg_enable [expr ! $::cg_enable] $toglwin postredisplay } # Resize And Initialize The GL Window proc ReshapeCallback { toglwin { w -1 } { h -1 } } { set w [$toglwin width] set h [$toglwin height] glViewport 0 0 $w $h ; # Reset The Current Viewport glMatrixMode GL_PROJECTION ; # Select The Projection Matrix glLoadIdentity ; # Reset The Projection Matrix # Calculate The Aspect Ratio Of The Window gluPerspective 50.0 [expr double($w)/double($h)] 5 2000 glMatrixMode GL_MODELVIEW ; # Select The Modelview Matrix glLoadIdentity ; # Reset The Modelview Matrix set ::gDemo(winWidth) $w set ::gDemo(winHeight) $h } # All Setup For OpenGL Goes Here proc CreateCallback { toglwin } { global mesh # Start Of User Initialization glClearColor 0.0 0.0 0.0 0.5 ; # Black Background glClearDepth 1.0 ; # Depth Buffer Setup glDepthFunc GL_LEQUAL ; # The Type Of Depth Testing glEnable GL_DEPTH_TEST ; # Enable Depth Testing glShadeModel GL_SMOOTH ; # Select Smooth Shading # Set Perspective Calculations To Most Accurate glHint GL_PERSPECTIVE_CORRECTION_HINT GL_NICEST glPolygonMode GL_FRONT_AND_BACK GL_LINE ; # Draw Our Mesh In Wireframe Mode # Create Our Mesh for { set x 0 } { $x < $::SIZE } { incr x } { for { set z 0 } { $z < $::SIZE } { incr z } { # We Want To Center Our Mesh Around The Origin # Set The Y Values For All Points To 0 set mesh($x,$z) [list [expr double ($::SIZE / 2) - $x] \ 0.0 \ [expr double ($::SIZE / 2) - $z]] } } # Setup Cg tcl3dCgResetError set ::cgContext [cgCreateContext] ; # Create A New Context For Our Cg Program(s) # Validate Our Context Generation Was Successful set retVal [tcl3dCgGetError $::cgContext] if { $retVal ne "" } { error "cgCreateContext: $retVal" } # Search for a valid vertex shader profile in this order: # # CG_PROFILE_ARBVP1 - GL_ARB_vertex_program # CG_PROFILE_VP30 - GL_NV_vertex_program2 (support for loops) # CG_PROFILE_VP20 - GL_NV_vertex_program set ::cgVertexProfile [tcl3dCgFindProfile $::CG_PROFILE_ARBVP1 \ $::CG_PROFILE_VP30 \ $::CG_PROFILE_VP20] if { $::cgVertexProfile eq "" } { tk_messageBox -icon error -type ok \ -title "tcl3dCgFindProfile" \ -message "Failed to initialize fragment shader. No ARBVP1, VP30 or VP20 profile available." return } # Load And Compile The Vertex Shader From File set fileName [tcl3dGetExtFile [file join $::gDemo(scriptDir) "Cg" "Wave.cg"]] set ::cgProgram [cgCreateProgramFromFile $::cgContext CG_SOURCE \ $fileName $::cgVertexProfile "main" 0] # Validate Success set retVal [tcl3dCgGetError $::cgContext] if { $retVal ne "" } { error "cgCreateProgramFromFile: $retVal" } # Load The Program cgGLLoadProgram $::cgProgram # Get Handles To Each Of Our Parameters So That # We Can Change Them At Will Within Our Code set ::position [cgGetNamedParameter $::cgProgram "IN.position"] set ::color [cgGetNamedParameter $::cgProgram "IN.color"] set ::wave [cgGetNamedParameter $::cgProgram "IN.wave"] set ::modelViewMatrix [cgGetNamedParameter $::cgProgram "ModelViewProj"] } proc DisplayCallback { toglwin } { global mesh glClear [expr $::GL_COLOR_BUFFER_BIT | $::GL_DEPTH_BUFFER_BIT] # Viewport command is not really needed, but has been inserted for # Mac OSX. Presentation framework (Tk) does not send a reshape event, # when switching from one demo to another. glViewport 0 0 [$toglwin width] [$toglwin height] glLoadIdentity # Position The Camera To Look At Our Mesh From A Distance gluLookAt 0.0 25.0 -45.0 0.0 0.0 0.0 0 1 0 # Set The Modelview Matrix Of Our Shader To Our OpenGL Modelview Matrix cgGLSetStateMatrixParameter $::modelViewMatrix \ CG_GL_MODELVIEW_PROJECTION_MATRIX \ CG_GL_MATRIX_IDENTITY if { $::cg_enable } { cgGLEnableProfile $::cgVertexProfile ; # Enable Our Vertex Shader Profile # Bind Our Vertex Program To The Current State cgGLBindProgram $::cgProgram # Set The Drawing Color To Light Green (Can Be Changed By Shader, Etc...) cgGLSetParameter4f $::color 0.5 1.0 0.5 1.0 } # Start Drawing Our Mesh set size1 [expr {$::SIZE - 1}] for { set x 0 } { $x < $size1 } { incr x } { # Draw A Triangle Strip For Each Column Of Our Mesh glBegin GL_TRIANGLE_STRIP for { set z 0 } { $z < $size1 } { incr z } { # Set The Wave Parameter Of Our Shader To The # Incremented Wave Value From Our Main Program cgGLSetParameter3f $::wave $::wave_movement 1.0 1.0 set x1 [expr {$x + 1}] glVertex3fv $mesh($x,$z) glVertex3fv $mesh($x1,$z) # Increment Our Wave Movement set ::wave_movement [expr {$::wave_movement + 0.00001}] if { $::wave_movement > $::TWO_PI } { # Prevent Crashing set ::wave_movement 0.0 } } glEnd } if { $::cg_enable } { cgGLDisableProfile $::cgVertexProfile ; # Disable Our Vertex Profile } glFlush $toglwin swapbuffers } proc Animate {} { .fr.toglwin postredisplay set ::animateId [tcl3dAfterIdle Animate] } proc StartAnimation {} { if { ! [info exists ::animateId] } { Animate } } proc StopAnimation {} { if { [info exists ::animateId] } { after cancel $::animateId unset ::animateId } } proc Cleanup {} { # Destroy Our Cg Context And All Programs Contained Within It cgDestroyContext $::cgContext } # Put all exit related code here. proc ExitProg {} { exit } # Create the OpenGL window and some Tk helper widgets. proc CreateWindow {} { frame .fr pack .fr -expand 1 -fill both # Create Our OpenGL Window togl .fr.toglwin -width $::gDemo(winWidth) -height $::gDemo(winHeight) \ -double true -depth true \ -createproc CreateCallback \ -reshapeproc ReshapeCallback \ -displayproc DisplayCallback listbox .fr.usage -font $::gDemo(listFont) -height 4 label .fr.info grid .fr.toglwin -row 0 -column 0 -sticky news grid .fr.usage -row 1 -column 0 -sticky news grid .fr.info -row 2 -column 0 -sticky news grid rowconfigure .fr 0 -weight 1 grid columnconfigure .fr 0 -weight 1 wm title . "Tcl3D demo: NeHe & Owen Bourne's Cg Vertex Shader Tutorial (Lesson 47)" # Watch For ESC Key And Quit Messages wm protocol . WM_DELETE_WINDOW "ExitProg" bind . "ExitProg" bind . "ToggleWindowMode" bind . "ToggleCg .fr.toglwin" bind .fr.toglwin <1> "StartAnimation" bind .fr.toglwin <2> "StopAnimation" bind .fr.toglwin <3> "StopAnimation" bind .fr.toglwin "StopAnimation" .fr.usage insert end "Key-Escape Exit" .fr.usage insert end "Key-F1 Toggle window mode" .fr.usage insert end "Key-s Toggle Cg shading" .fr.usage insert end "Mouse-L|MR Start|Stop animation" .fr.usage configure -state disabled } CreateWindow PrintInfo [format "Running on %s with a %s (OpenGL %s, Tcl %s)" \ $tcl_platform(os) [glGetString GL_RENDERER] \ [glGetString GL_VERSION] [info patchlevel]] if { [file tail [info script]] == [file tail $::argv0] } { # If started directly from tclsh or wish, then start animation. update StartAnimation }