Contents / Previous / Next


Lighting Example Program

  public void init(GLDrawable drawable)
    {
      ...

      initLight( gl );
      ...
    }

  float[] colorBlack  = {0.0f,0.0f,0.0f,1.0f};
  float[] colorWhite  = {1.0f,1.0f,1.0f,1.0f};
  float[] colorGray   = {0.6f,0.6f,0.6f,1.0f};
  float[] colorRed    = {1.0f,0.0f,0.0f,1.0f};
  float[] colorBlue   = {0.0f,0.0f,0.1f,1.0f};
  float[] colorYellow = {1.0f,1.0f,0.0f,1.0f};
  float[] colorLightYellow = {.5f,.5f,0.0f,1.0f};

  public void initLight( GL gl)
    {
      // First Switch the lights on.
      gl.glEnable( GL.GL_LIGHTING );
      gl.glDisable( GL.GL_LIGHT0 );
      gl.glEnable( GL.GL_LIGHT1 );
      gl.glEnable( GL.GL_LIGHT2 );

      //
      // Light 0.
      //	
      // Default from the red book.
      //
      gl.glLightfv( GL.GL_LIGHT0, GL.GL_AMBIENT, ambient);
      gl.glLightfv( GL.GL_LIGHT0, GL.GL_POSITION, position);	

      //
      // Light 1.
      //
      // Position and direction (spotlight)
      float posLight1[] = { 1.0f, 1.f, 1.f, 0.0f };
      float spotDirection[] = { -1.0f, -1.0f, 0.f };
      //gl.glLightfv( GL.GL_LIGHT1, GL.GL_POSITION, posLight1 );
      //gl.glLightf( GL.GL_LIGHT1, GL.GL_SPOT_CUTOFF, 60.0F );
      //gl.glLightfv( GL.GL_LIGHT1, GL.GL_SPOT_DIRECTION, spotDirection );
      //
      gl.glLightfv( GL.GL_LIGHT1, GL.GL_AMBIENT, colorGray );
      gl.glLightfv( GL.GL_LIGHT1, GL.GL_DIFFUSE, colorGray );
      gl.glLightfv( GL.GL_LIGHT1, GL.GL_SPECULAR, colorWhite );
      //gl.glLightfv( GL.GL_LIGHT1, GL.GL_SPECULAR, colorRed );
      //
      gl.glLightf( GL.GL_LIGHT1, GL.GL_CONSTANT_ATTENUATION, 0.2f );

      //
      // Light 2.
      //
      // Position and direction
      float posLight2[] = { .5f, 1.f, 3.f, 0.0f };
      gl.glLightfv( GL.GL_LIGHT2, GL.GL_POSITION, posLight2 );
      //
      gl.glLightfv( GL.GL_LIGHT2, GL.GL_AMBIENT, colorGray );
      gl.glLightfv( GL.GL_LIGHT2, GL.GL_DIFFUSE, colorGray );
      gl.glLightfv( GL.GL_LIGHT2, GL.GL_SPECULAR, colorWhite );
      //
      gl.glLightf( GL.GL_LIGHT2, GL.GL_CONSTANT_ATTENUATION, 0.8f );
    }


  private void setWhiteMaterial( GL gl )
    {
      gl.glMaterialfv( GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT, colorWhite );
      gl.glMaterialfv( GL.GL_FRONT_AND_BACK, GL.GL_DIFFUSE, colorWhite );
      gl.glMaterialfv( GL.GL_FRONT_AND_BACK, GL.GL_SPECULAR, colorWhite );
      gl.glMateriali( GL.GL_FRONT_AND_BACK, GL.GL_SHININESS, 4 );
      gl.glMaterialfv( GL.GL_FRONT_AND_BACK, GL.GL_EMISSION, colorBlack );
    }

  public void display(GLDrawable drawable)
    {
      ...

      setWhiteMaterial( gl );
      drawSomethingWhite( gl );

      setBlueMaterial( gl );
      drawSomethingBlue( gl );

      ...
    }