L'exécutable
Le source: Accum.cpp
#include "windows.h"
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
#include <stdio.h>
static float anglex = 0.0F ;
static float angley = 0.0F ;
GLsizei width,height;
void myinit(void) {
GLfloat ambient[] = { 0.4F,0.4F,0.4F,1.0F };
GLfloat diffuse[] = { 1.0F,1.0F,1.0F,1.0F };
GLfloat specular[] = { 1.0F,1.0F,1.0F,1.0F };
GLfloat position[] = { 0.0F,2.0F,2.0F,0.0F };
GLfloat mat_ambient[] = { 0.2F,0.2F,0.2F,1.0F };
GLfloat mat_diffuse[] = { 0.7F,0.7F,0.7F,1.0F };
GLfloat mat_specular[] = { 0.9F,0.9F,0.9F,1.0F };
GLfloat mat_shininess[] = { 50.0F };
GLfloat lmodel_ambient[] = { 0.2F,0.2F,0.2F,1.0F };
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glLightfv(GL_LIGHT0,GL_AMBIENT,ambient);
glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuse);
glLightfv(GL_LIGHT0,GL_SPECULAR,specular);
glLightfv(GL_LIGHT0,GL_POSITION,position);
glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE);
glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
glClearAccum(0.0,0.0,0.0,0.0);
}
#define ACSIZE 16
GLfloat dx[ACSIZE],dy[ACSIZE];
GLfloat jitter3[3][2] = {
{0.5F,0.5F},
{1.35899e-05F,0.230369F},
{0.000189185F,0.766878F},
};
GLfloat jitter11[11][2] = {
{0.5F,0.5F},{0.406537F,0.135858F},
{0.860325F,0.968558F},{0.680141F,0.232877F},
{0.775694F,0.584871F},{0.963354F,0.309056F},
{0.593493F,0.864072F},{0.224334F,0.415055F},
{0.0366643F,0.690884F},{0.139685F,0.0313988F},
{0.319861F,0.767097F},
};
GLfloat jitter16[16][2] = {
{0.4375F,0.4375F},{0.1875F,0.5625F},
{0.9375F,1.1875F},{0.4375F,0.9375F-1.0F},
{0.6875F,0.5625F},{0.1875F,0.0625F},
{0.6875F,0.3125F},{0.1875F,0.3125F},
{0.4375F,0.1875F},{0.9375F-1.0F,0.4375F},
{0.6875F,0.8125F},{0.4375F,0.6875F},
{0.6875F,0.0625F},{0.9375F,0.9375F},
{1.1875F,0.8125F},{0.9375F,0.6875F},
};
GLfloat jitter29[29][2] = {
{0.5F,0.5F},{0.498126F,0.141363F},
{0.217276F,0.651732F},{0.439503F,0.954859F},
{0.734171F,0.836294F},{0.912454F,0.79952F},
{0.406153F,0.671156F},{0.0163892F,0.631994F},
{0.298064F,0.843476F},{0.312025F,0.0990405F},
{0.98135F,0.965697F},{0.841999F,0.272378F},
{0.559348F,0.32727F},{0.809331F,0.638901F},
{0.632583F,0.994471F},{0.00588314F,0.146344F},
{0.713365F,0.437896F},{0.185173F,0.246584F},
{0.901735F,0.474544F},{0.366423F,0.296698F},
{0.687032F,0.188184F},{0.313256F,0.472999F},
{0.543195F,0.800044F},{0.629329F,0.631599F},
{0.818263F,0.0439354F},{0.163978F,0.00621497F},
{0.109533F,0.812811F},{0.131325F,0.471624F},
{0.0196755F,0.331813F},
};
GLfloat jitter90[90][2] = {
{0.5F,0.5F},{0.784289F,0.417355F},
{0.608691F,0.678948F},{0.546538F,0.976002F},
{0.972245F,0.270498F},{0.765121F,0.189392F},
{0.513193F,0.743827F},{0.123709F,0.874866F},
{0.991334F,0.745136F},{0.56342F,0.0925047F},
{0.662226F,0.143317F},{0.444563F,0.928535F},
{0.248017F,0.981655F},{0.100115F,0.771923F},
{0.593937F,0.559383F},{0.392095F,0.225932F},
{0.428776F,0.812094F},{0.510615F,0.633584F},
{0.836431F,0.00343328F},{0.494037F,0.391771F},
{0.617448F,0.792324F},{0.688599F,0.48914F},
{0.530421F,0.859206F},{0.0742278F,0.665344F},
{0.979388F,0.626835F},{0.183806F,0.479216F},
{0.151222F,0.0803998F},{0.476489F,0.157863F},
{0.792675F,0.653531F},{0.0990416F,0.267284F},
{0.776667F,0.303894F},{0.312904F,0.296018F},
{0.288777F,0.691008F},{0.460097F,0.0436075F},
{0.594323F,0.440751F},{0.876296F,0.472043F},
{0.0442623F,0.0693901F},{0.355476F,0.00442787F},
{0.391763F,0.361327F},{0.406994F,0.696053F},
{0.708393F,0.724992F},{0.925807F,0.933103F},
{0.850618F,0.11774F},{0.867486F,0.233677F},
{0.208805F,0.285484F},{0.572129F,0.211505F},
{0.172931F,0.180455F},{0.327574F,0.598031F},
{0.685187F,0.372379F},{0.23375F,0.878555F},
{0.960657F,0.409561F},{0.371005F,0.113866F},
{0.29471F,0.496941F},{0.748611F,0.0735321F},
{0.878643F,0.34504F},{0.210987F,0.778228F},
{0.692961F,0.606194F},{0.82152F,0.8893F},
{0.0982095F,0.563104F},{0.214514F,0.581197F},
{0.734262F,0.956545F},{0.881377F,0.583548F},
{0.0560485F,0.174277F},{0.0729515F,0.458003F},
{0.719604F,0.840564F},{0.325388F,0.7883F},
{0.26136F,0.0848927F},{0.393754F,0.467505F},
{0.425361F,0.577672F},{0.648594F,0.0248658F},
{0.983843F,0.521048F},{0.272936F,0.395127F},
{0.177695F,0.675733F},{0.89175F,0.700901F},
{0.632301F,0.908259F},{0.782859F,0.53611F},
{0.0141421F,0.855548F},{0.0437116F,0.351866F},
{0.939604F,0.0450863F},{0.0320883F,0.962943F},
{0.341155F,0.895317F},{0.952087F,0.158387F},
{0.908415F,0.820054F},{0.481435F,0.281195F},
{0.675525F,0.25699F},{0.585273F,0.324454F},
{0.156488F,0.376783F},{0.140434F,0.977416F},
{0.808155F,0.77305F},{0.282973F,0.188937F},
};
void loaddxdy(void) {
long i;
for (i = 0; i < ACSIZE; i++) {
dx[i] = jitter16[i][0]*10/width;
dy[i] = jitter16[i][1]*10/height; }
}
void CALLBACK display(void) {
int i;
glPushMatrix() ;
glClear(GL_ACCUM_BUFFER_BIT);
loaddxdy();
for (i = 0; i < (ACSIZE); i++) {
printf("Pass %d\n",i);
glPushMatrix();
glTranslatef(dx[i],dy[i],0.0);
glRotatef(45.0,1.0,1.0,1.0);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
glRotatef(angley,0.0F,1.0F,0.0F) ;
glRotatef(anglex,1.0F,0.0F,0.0F) ;
auxSolidTeapot(2.0);
glPopMatrix();
glAccum(GL_ACCUM,1.0/(ACSIZE)); }
printf("final job\n");
glAccum(GL_RETURN,1.0);
printf("done\n");
glPopMatrix() ;
glFlush();
auxSwapBuffers() ;
}
void CALLBACK myReshape(int w,int h) {
width = w; height = h;
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho(-3.0,3.0,-3.0*(GLfloat) h/(GLfloat) w,3.0*(GLfloat) h/(GLfloat) w,-15.0,15.0);
else
glOrtho(-3.0*(GLfloat) w/(GLfloat) h,3.0*(GLfloat) w/(GLfloat) h,-3.0,3.0,-15.0,15.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void CALLBACK up(void) {
anglex -= 5 ;
}
void CALLBACK down(void) {
anglex += 5 ;
}
void CALLBACK left(void) {
angley -= 5 ;
}
void CALLBACK right(void) {
angley += 5 ;
}
void main(void) {
auxInitDisplayMode(AUX_DOUBLE|AUX_RGB|AUX_ACCUM|AUX_DEPTH);
auxInitPosition(0,0,300,300);
auxInitWindow("Utilisation de du Tampon Accumulation : Antialiasing");
myinit();
auxKeyFunc(AUX_UP,up) ;
auxKeyFunc(AUX_DOWN,down) ;
auxKeyFunc(AUX_LEFT,left) ;
auxKeyFunc(AUX_RIGHT,right) ;
auxReshapeFunc(myReshape);
auxMainLoop(display);
}
RETOUR