Doris

light.lua

This displays a teapot which is lit by a single light. You can rotate the teapot using the rotator. The spinners change the RGB values of the light and the light can be moved from left to right with a spinner.

Screenshot

light.lua screenshot

Source Code


-- Try some lights
-- $Id: light.lua,v 1.5 2002/06/24 07:06:31 trout Exp $

-- colour of our light: r,g,b
colour = {.6,.3,0}

-- create a matrix
rotatemat=Matrix:new()

-- The callback function which renders our scene.
function RenderScene()

   -- Note: we have to put this code here as RenderScene is only called
   -- after all of our GLUT and Doris objects have been created.
   -- ie. we cant create the light before we create the window (below)
   if not first then
     first = 1
     glEnable(GL_LIGHTING)
     glEnable(GL_LIGHT0)
     glLight(GL_LIGHT0, GL_POSITION, {10,10,0})
     glLight(GL_LIGHT0, GL_AMBIENT, colour)
     glClearColor(.9,.9,.9,1.0)
   end
  
   glClear(GL_DEPTH_BUFFER_BIT + GL_COLOR_BUFFER_BIT)
   gluLookAt(0,0,5, 0,0,0, 0,1,0)
   glMatrixMode(GL_MODELVIEW)
   glPushMatrix()
     glLoadMatrix(rotatemat)
     Render:teapot{solid=1}
   glPopMatrix()
end

-- Create our window and specify a name and window rendering function
wmain = Window:create{
   title="Doris: Light example",
   render=RenderScene
}

-- Put a sub window at the bottom of the screen
sw = SubWindow{ parent=wmain, side="bottom" }

-- Add an object rotator to the bottom of the screen that
-- manipulates the matrix we created.
Rotator{ parent=sw, text="Rotate teapot",
             value=rotatemat, line="|", spin = .9
}

-- Some spinners to manipulate the colour...
Spinner{ parent=sw, text="Red",
     value=colour[1], type="float", limits={0,1},
     update=function(c)
         colour[1]=c
         glLight(GL_LIGHT0, GL_AMBIENT, colour)
     end
}

Spinner{ parent=sw, text="Green",
     value=colour[1], type="float", limits={0,1},
     update=function(c)
         colour[2]=c
         glLight(GL_LIGHT0, GL_AMBIENT, colour)
     end
}

Spinner{ parent=sw, text="Blue",
     value=colour[1], type="float", limits={0,1}, line="v",
     update=function(c)
         colour[3]=c
         glLight(GL_LIGHT0, GL_AMBIENT, colour)
     end
}

-- A spinner to move the light left and right
Spinner{ parent=sw, text="Move light",
     value=10, type="float", limits={-10,10}, line="v",
     update=function(p)
         glLight(GL_LIGHT0, GL_POSITION, {p,10,0})
     end
}


Back