L'exécutable

Image112.gif (6931 octets)

Le source: Fog.cpp


/* Copyright (c) Mark J. Kilgard, 1994. */

/**
 * (c) Copyright 1993, Silicon Graphics, Inc.
 * ALL RIGHTS RESERVED 
 * Permission to use, copy, modify, and distribute this software for 
 * any purpose and without fee is hereby granted, provided that the above
 * copyright notice appear in all copies and that both the copyright notice
 * and this permission notice appear in supporting documentation, and that 
 * the name of Silicon Graphics, Inc. not be used in advertising
 * or publicity pertaining to distribution of the software without specific,
 * written prior permission. 
 *
 * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
 * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
 * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
 * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
 * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
 * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
 * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
 * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
 * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
 * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
 * 
 * US Government Users Restricted Rights 
 * Use, duplication, or disclosure by the Government is subject to
 * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
 * (c)(1)(ii) of the Rights in Technical Data and Computer Software
 * clause at DFARS 252.227-7013 and/or in similar or successor
 * clauses in the FAR or the DOD or NASA FAR Supplement.
 * Unpublished-- rights reserved under the copyright laws of the
 * United States.  Contractor/manufacturer is Silicon Graphics,
 * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
 *
 * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
 */

/*
 *  fog.c
 *  This program draws 5 red teapots, each at a different 
 *  z distance from the eye, in different types of fog.  
 *  Pressing the left mouse button chooses between 3 types of 
 *  fog:  exponential, exponential squared, and linear.  
 *  In this program, there is a fixed density value, as well 
 *  as fixed start and end values for the linear fog.
 */


#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>

#include <stdio.h>

#include "ModuleCouleurs.h"
#include "ModuleManipulateur.h"
#include "ModuleMenus.h"
#include "ModuleReshape.h"

static GLint fogMode;

void myinit(void) {
  GLfloat position[] = { 0.0,3.0,3.0,0.0 };
  GLfloat local_view[] = { 0.0 };
  glEnable(GL_DEPTH_TEST);
  glDepthFunc(GL_LESS);
  glLightfv(GL_LIGHT0,GL_POSITION,position);
  glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER,local_view);
  glFrontFace(GL_CW);
  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT0);
  glEnable(GL_AUTO_NORMAL);
  glEnable(GL_NORMALIZE);
  glEnable(GL_FOG);
  fogMode = GL_EXP;
  glFogi(GL_FOG_MODE,fogMode);
  glFogfv(GL_FOG_COLOR,couleurGrisMoyen());
  glFogf(GL_FOG_DENSITY,0.35F);
  glHint(GL_FOG_HINT,GL_DONT_CARE);
  glClearColor(0.5,0.5,0.5,1.0);
}

void renderRedTeapot(GLfloat x,GLfloat y,GLfloat z) {
  float mat[4];
  glPushMatrix();
  glTranslatef(x,y,z);
  mat[0] = 0.1745F;
  mat[1] = 0.01175F; 
  mat[2] = 0.01175F; 
  mat[3] = 1.0F;  
  glMaterialfv(GL_FRONT,GL_AMBIENT,mat);
  mat[0] = 0.61424F; 
  mat[1] = 0.04136F; 
  mat[2] = 0.04136F;  
  glMaterialfv(GL_FRONT,GL_DIFFUSE,mat);
  mat[0] = 0.727811F; 
  mat[1] = 0.626959F;
  mat[2] = 0.626959F;
  glMaterialfv(GL_FRONT,GL_SPECULAR,mat);
  glMaterialf(GL_FRONT,GL_SHININESS,0.6F*128.0F);
  glColor4fv(couleurBlanc());
  glutSolidTeapot(1.0);
  glPopMatrix();
}

void display(void) {
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glPushMatrix();
  manipulateurSouris();
  manipulateurClavier();
  renderRedTeapot(-4.0,-0.5,-1.0);
  renderRedTeapot(-2.0,-0.5,-2.0);
  renderRedTeapot(0.0,-0.5,-3.0);
  renderRedTeapot(2.0,-0.5,-4.0);
  renderRedTeapot(4.0,-0.5,-5.0);
  glPopMatrix();
  glFlush();
  glutSwapBuffers() ;
}

void souris(int bouton,int etat,int x,int y) {
  if ( sourisManipulateur(bouton,etat,x,y) )
    glutPostRedisplay();
    else 
    if ( ( bouton == GLUT_LEFT_BUTTON ) && ( etat == GLUT_UP ) ) {
      if(fogMode == GL_EXP) {
        fogMode = GL_EXP2;
        printf("Fog mode is GL_EXP2\n"); }
        else
        if(fogMode == GL_EXP2) {
          fogMode = GL_LINEAR;
          printf("Fog mode is GL_LINEAR\n");
          glFogf(GL_FOG_START,1.0);
          glFogf(GL_FOG_END,5.0); }
          else 
          if(fogMode == GL_LINEAR) {
            fogMode = GL_EXP;
            printf("Fog mode is GL_EXP\n"); }
      glFogi(GL_FOG_MODE,fogMode);
      glutPostRedisplay(); }
}

int main(int argc,char **argv) {
  glutInit(&argc,argv);
  glutInitDisplayMode(GLUT_RGBA|GLUT_DEPTH|GLUT_DOUBLE);
  glutInitWindowSize(450,150); 
  glutInitWindowPosition(50,50); 
  glutCreateWindow("Brouillard"); 
  myinit(); 
  creationMenuBasique();
  setParametresOrthoBasique(-2.0,2.0,-2.0,2.0,-500.0,500.0);
  setManipulateurDistance(1.0F);
  glutReshapeFunc(reshapeOrthoBasique);
  glutKeyboardFunc(keyBasique);
  glutSpecialFunc(specialBasique);
  glutMotionFunc(motionBasique);
  glutMouseFunc(souris);
  glutDisplayFunc(display);
  glutMainLoop();
  return(0);}

Les modules utilitaires : Modules.zip

WB01624_.gif (281 octets) RETOUR