Yurttas/PL/OOL/Cplusplus/oldies/f/swhsu/swhsu/opengl/codehtml/light.html

From ZCubes Wiki
Jump to navigation Jump to search

Header image


Yurttas PL OOL Cplusplus oldies f swhsu swhsu opengl codehtml images mm spacer.gif

Yurttas PL OOL Cplusplus oldies f swhsu swhsu opengl codehtml images mm spacer.gif

Yurttas PL OOL Cplusplus oldies f swhsu swhsu opengl codehtml images mm spacer.gif


    home

Example


light_00.c (download)

Yurttas PL OOL Cplusplus oldies f swhsu swhsu opengl codehtml images light.jpg




/*
 *  light.c
 *  This program demonstrates the use of the OpenGL lighting
 *  model.  A sphere is drawn using a grey material characteristic.
 *  A single light source illuminates the object.
 */
#include <GL/glut.h>
#include <stdlib.h>

/*  Initialize material property, light source, lighting model,
 *  and depth buffer.
 */
void init(void) {
  GLfloat mat_specular[]={
    1.0, 1.0, 1.0, 1.0
  };
  GLfloat mat_shininess[]={
    50.0
  };
  GLfloat light_position[]={
    1.0, 1.0, 1.0, 0.0
  };

  glClearColor(0.0,
               0.0,
               0.0,
               0.0);
  glShadeModel(GL_SMOOTH);

  glMaterialfv(GL_FRONT,
               GL_SPECULAR,
               mat_specular);
  glMaterialfv(GL_FRONT,
               GL_SHININESS,
               mat_shininess);
  glLightfv(GL_LIGHT0,
            GL_POSITION,
            light_position);

  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);
  glEnable(GL_DEPTH_TEST);
}

void display(void) {
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glutSolidSphere(1.0,
                  20,
                  16);
  glFlush();
}

void reshape(int w, int h) {
  glViewport(0,
             0,
             (GLsizei)w,
             (GLsizei)h);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  if(w <= h)
    glOrtho(-1.5,
            1.5,
            -1.5 *(GLfloat)h/(GLfloat)w,
            1.5 *(GLfloat)h/(GLfloat)w,
            -10.0, 10.0);
  else
    glOrtho(-1.5 *(GLfloat)w/(GLfloat)h,
            1.5 *(GLfloat)w/(GLfloat)h,
            -1.5,
            1.5,
            -10.0,
            10.0);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
}

void keyboard(unsigned char key, int x, int y) {
  switch(key){
    case 27:
      exit(0);
      break;
  }
}

int main(int argc, char* argv[]) {
  glutInit(&argc,
           argv);
  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
  glutInitWindowSize(500,
                     500);
  glutInitWindowPosition(100,
                         100);
  glutCreateWindow(argv[0]);
  init();
  glutDisplayFunc(display);
  glutReshapeFunc(reshape);
  glutKeyboardFunc(keyboard);
  glutMainLoop();
  return 0;
}