progs/redbook: add additional tests for GL 1.4
This commit is contained in:
parent
3be1c11001
commit
ce65a8debe
|
@ -9,14 +9,82 @@ LIB_DEP = $(TOP)/$(LIB_DIR)/$(GL_LIB_NAME) $(TOP)/$(LIB_DIR)/$(GLU_LIB_NAME) $(T
|
||||||
|
|
||||||
LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) $(APP_LIB_DEPS)
|
LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) $(APP_LIB_DEPS)
|
||||||
|
|
||||||
PROGS = aaindex aapoly aargb accanti accpersp alpha alpha3D anti \
|
PROGS = aaindex \
|
||||||
bezcurve bezmesh checker clip colormat cube depthcue dof \
|
aapoly \
|
||||||
double drawf feedback fog fogindex font hello image light \
|
aargb \
|
||||||
lines list material mipmap model movelight nurbs pickdepth \
|
accanti \
|
||||||
picksquare plane planet polyoff polys quadric robot sccolorlight \
|
accpersp \
|
||||||
scene scenebamb sceneflat select smooth stencil stroke surface \
|
alpha \
|
||||||
teaambient teapots tess tesswind texbind texgen texprox texsub \
|
alpha3D \
|
||||||
texturesurf torus trim unproject varray wrap
|
anti \
|
||||||
|
bezcurve \
|
||||||
|
bezmesh \
|
||||||
|
checker \
|
||||||
|
clip \
|
||||||
|
colormat \
|
||||||
|
combiner \
|
||||||
|
convolution \
|
||||||
|
cube \
|
||||||
|
cubemap \
|
||||||
|
depthcue \
|
||||||
|
dof \
|
||||||
|
double \
|
||||||
|
drawf \
|
||||||
|
feedback \
|
||||||
|
fog \
|
||||||
|
fogcoord \
|
||||||
|
fogindex \
|
||||||
|
font \
|
||||||
|
hello \
|
||||||
|
histogram \
|
||||||
|
image \
|
||||||
|
light \
|
||||||
|
lines \
|
||||||
|
list \
|
||||||
|
material \
|
||||||
|
minmax \
|
||||||
|
mipmap \
|
||||||
|
model \
|
||||||
|
movelight \
|
||||||
|
multitex \
|
||||||
|
multisamp \
|
||||||
|
mvarray \
|
||||||
|
nurbs \
|
||||||
|
pickdepth \
|
||||||
|
picksquare \
|
||||||
|
plane \
|
||||||
|
planet \
|
||||||
|
pointp \
|
||||||
|
polyoff \
|
||||||
|
polys \
|
||||||
|
quadric \
|
||||||
|
robot \
|
||||||
|
sccolorlight \
|
||||||
|
scene \
|
||||||
|
scenebamb \
|
||||||
|
sceneflat \
|
||||||
|
select \
|
||||||
|
shadowmap \
|
||||||
|
smooth \
|
||||||
|
stencil \
|
||||||
|
stroke \
|
||||||
|
surface \
|
||||||
|
surfpoints \
|
||||||
|
teaambient \
|
||||||
|
teapots \
|
||||||
|
tess \
|
||||||
|
tesswind \
|
||||||
|
texbind \
|
||||||
|
texgen \
|
||||||
|
texprox \
|
||||||
|
texsub \
|
||||||
|
texturesurf \
|
||||||
|
texture3d \
|
||||||
|
torus \
|
||||||
|
trim \
|
||||||
|
unproject \
|
||||||
|
varray \
|
||||||
|
wrap
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,29 +14,39 @@ progs = [
|
||||||
'checker',
|
'checker',
|
||||||
'clip',
|
'clip',
|
||||||
'colormat',
|
'colormat',
|
||||||
|
'combiner',
|
||||||
|
'convolution',
|
||||||
'cube',
|
'cube',
|
||||||
|
'cubemap',
|
||||||
'depthcue',
|
'depthcue',
|
||||||
'dof',
|
'dof',
|
||||||
'double',
|
'double',
|
||||||
'drawf',
|
'drawf',
|
||||||
'feedback',
|
'feedback',
|
||||||
'fog',
|
'fog',
|
||||||
|
'fogcoord',
|
||||||
'fogindex',
|
'fogindex',
|
||||||
'font',
|
'font',
|
||||||
'hello',
|
'hello',
|
||||||
|
'histogram',
|
||||||
'image',
|
'image',
|
||||||
'light',
|
'light',
|
||||||
'lines',
|
'lines',
|
||||||
'list',
|
'list',
|
||||||
'material',
|
'material',
|
||||||
|
'minmax',
|
||||||
'mipmap',
|
'mipmap',
|
||||||
'model',
|
'model',
|
||||||
'movelight',
|
'movelight',
|
||||||
|
'multisamp',
|
||||||
|
'multitex',
|
||||||
|
'mvarray',
|
||||||
'nurbs',
|
'nurbs',
|
||||||
'pickdepth',
|
'pickdepth',
|
||||||
'picksquare',
|
'picksquare',
|
||||||
'plane',
|
'plane',
|
||||||
'planet',
|
'planet',
|
||||||
|
'pointp',
|
||||||
'polyoff',
|
'polyoff',
|
||||||
'polys',
|
'polys',
|
||||||
'quadric',
|
'quadric',
|
||||||
|
@ -46,10 +56,12 @@ progs = [
|
||||||
'scene',
|
'scene',
|
||||||
'sceneflat',
|
'sceneflat',
|
||||||
'select',
|
'select',
|
||||||
|
'shadowmap',
|
||||||
'smooth',
|
'smooth',
|
||||||
'stencil',
|
'stencil',
|
||||||
'stroke',
|
'stroke',
|
||||||
'surface',
|
'surface',
|
||||||
|
'surfpoints',
|
||||||
'teaambient',
|
'teaambient',
|
||||||
'teapots',
|
'teapots',
|
||||||
'tess',
|
'tess',
|
||||||
|
@ -59,6 +71,7 @@ progs = [
|
||||||
'texprox',
|
'texprox',
|
||||||
'texsub',
|
'texsub',
|
||||||
'texturesurf',
|
'texturesurf',
|
||||||
|
'texture3d',
|
||||||
'torus',
|
'torus',
|
||||||
'trim',
|
'trim',
|
||||||
'unproject',
|
'unproject',
|
||||||
|
|
|
@ -0,0 +1,377 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1993-2003, 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.
|
||||||
|
* 1500 Crittenden Lane
|
||||||
|
* Mountain View, CA 94043
|
||||||
|
* United State of America
|
||||||
|
*
|
||||||
|
* OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* combiner.c
|
||||||
|
* This program renders a variety of quads showing different
|
||||||
|
* effects of texture combiner functions.
|
||||||
|
*
|
||||||
|
* The first row renders an untextured polygon (so you can
|
||||||
|
* compare the fragment colors) and then the 2 textures.
|
||||||
|
* The second row shows several different combiner functions
|
||||||
|
* on a single texture: replace, modulate, add, add-signed,
|
||||||
|
* and subtract.
|
||||||
|
* The third row shows the interpolate combiner function
|
||||||
|
* on a single texture with a constant color/alpha value,
|
||||||
|
* varying the amount of interpolation.
|
||||||
|
* The fourth row uses multitexturing with two textures
|
||||||
|
* and different combiner functions.
|
||||||
|
* The fifth row are some combiner experiments: using the
|
||||||
|
* scaling factor and reversing the order of subtraction
|
||||||
|
* for a combination function.
|
||||||
|
*/
|
||||||
|
#include <GL/glut.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define imageWidth 8
|
||||||
|
#define imageHeight 8
|
||||||
|
/* arrays for two textures */
|
||||||
|
static GLubyte image0[imageHeight][imageWidth][4];
|
||||||
|
static GLubyte image1[imageHeight][imageWidth][4];
|
||||||
|
|
||||||
|
static GLuint texName[4];
|
||||||
|
|
||||||
|
static void makeImages(void)
|
||||||
|
{
|
||||||
|
int i, j, c;
|
||||||
|
for (i = 0; i < imageHeight; i++) {
|
||||||
|
for (j = 0; j < imageWidth; j++) {
|
||||||
|
c = ((i&2)==0)*255; /* horiz b & w stripes */
|
||||||
|
image0[i][j][0] = (GLubyte) c;
|
||||||
|
image0[i][j][1] = (GLubyte) c;
|
||||||
|
image0[i][j][2] = (GLubyte) c;
|
||||||
|
image0[i][j][3] = (GLubyte) 255;
|
||||||
|
c = ((j&4)!=0)*128; /* wider vertical 50% cyan and black stripes */
|
||||||
|
image1[i][j][0] = (GLubyte) 0;
|
||||||
|
image1[i][j][1] = (GLubyte) c;
|
||||||
|
image1[i][j][2] = (GLubyte) c;
|
||||||
|
image1[i][j][3] = (GLubyte) 255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void init(void)
|
||||||
|
{
|
||||||
|
glClearColor (0.0, 0.0, 0.0, 0.0);
|
||||||
|
glShadeModel(GL_SMOOTH);
|
||||||
|
|
||||||
|
makeImages();
|
||||||
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
|
|
||||||
|
glGenTextures(4, texName);
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texName[0]);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, imageWidth, imageHeight,
|
||||||
|
0, GL_RGBA, GL_UNSIGNED_BYTE, image0);
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texName[1]);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, imageWidth, imageHeight,
|
||||||
|
0, GL_RGBA, GL_UNSIGNED_BYTE, image1);
|
||||||
|
|
||||||
|
/* smooth-shaded polygon with multiple texture coordinates */
|
||||||
|
glNewList (1, GL_COMPILE);
|
||||||
|
glBegin(GL_QUADS);
|
||||||
|
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0, 0.0);
|
||||||
|
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0, 0.0);
|
||||||
|
glColor3f (0.5, 1.0, 0.25);
|
||||||
|
glVertex3f(0.0, 0.0, 0.0);
|
||||||
|
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0, 2.0);
|
||||||
|
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0, 2.0);
|
||||||
|
glColor3f (1.0, 1.0, 1.0);
|
||||||
|
glVertex3f(0.0, 1.0, 0.0);
|
||||||
|
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 2.0, 2.0);
|
||||||
|
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 2.0, 2.0);
|
||||||
|
glColor3f (1.0, 1.0, 1.0);
|
||||||
|
glVertex3f(1.0, 1.0, 0.0);
|
||||||
|
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 2.0, 0.0);
|
||||||
|
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 2.0, 0.0);
|
||||||
|
glColor3f (1.0, 0.5, 0.25);
|
||||||
|
glVertex3f(1.0, 0.0, 0.0);
|
||||||
|
glEnd();
|
||||||
|
glEndList ();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void display(void)
|
||||||
|
{
|
||||||
|
static GLfloat constColor[4] = {0.0, 0.0, 0.0, 0.0}; /* for use as constant texture color */
|
||||||
|
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
glDisable(GL_TEXTURE_2D); /* untextured polygon--see the "fragment" colors */
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(0.0, 5.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
/* draw ordinary textured polys; 1 texture unit; combine mode disabled */
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||||
|
glPushMatrix();
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texName[0]);
|
||||||
|
glTranslatef(1.0, 5.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glPushMatrix();
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texName[1]);
|
||||||
|
glTranslatef(2.0, 5.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
/* different combine modes enabled; 1 texture unit
|
||||||
|
* defaults are:
|
||||||
|
* glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
|
||||||
|
* glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
|
||||||
|
* glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);
|
||||||
|
* glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
|
||||||
|
*/
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texName[0]);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(1.0, 4.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(2.0, 4.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(3.0, 4.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD_SIGNED_ARB);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(4.0, 4.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_SUBTRACT_ARB);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(5.0, 4.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
/* interpolate combine with constant color; 1 texture unit
|
||||||
|
* use different alpha values for constant color
|
||||||
|
* defaults are:
|
||||||
|
* glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
|
||||||
|
* glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
|
||||||
|
* glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);
|
||||||
|
* glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
|
||||||
|
* glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_CONSTANT_ARB);
|
||||||
|
* glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA);
|
||||||
|
*/
|
||||||
|
constColor[3] = 0.2;
|
||||||
|
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, constColor);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texName[0]);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_CONSTANT_ARB);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(1.0, 3.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
constColor[3] = 0.4;
|
||||||
|
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, constColor);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(2.0, 3.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
constColor[3] = 0.6;
|
||||||
|
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, constColor);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(3.0, 3.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
constColor[4] = 0.8;
|
||||||
|
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, constColor);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(4.0, 3.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
/* combine textures 0 & 1
|
||||||
|
* defaults are:
|
||||||
|
* glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
|
||||||
|
* glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
|
||||||
|
* glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB);
|
||||||
|
* glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
|
||||||
|
*/
|
||||||
|
|
||||||
|
glActiveTextureARB (GL_TEXTURE0_ARB);
|
||||||
|
glEnable (GL_TEXTURE_2D);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texName[0]);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||||
|
|
||||||
|
glActiveTextureARB (GL_TEXTURE1_ARB);
|
||||||
|
glEnable (GL_TEXTURE_2D);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texName[1]);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(1.0, 2.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
/* try different combiner modes of texture unit 1 */
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(2.0, 2.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(3.0, 2.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD_SIGNED_ARB);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(4.0, 2.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_SUBTRACT_ARB);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(5.0, 2.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
/* some experiments */
|
||||||
|
|
||||||
|
/* see the effect of RGB_SCALE */
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 2.0);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(1.0, 1.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(2.0, 1.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 1.0);
|
||||||
|
|
||||||
|
/* using SOURCE0 and SOURCE1, reverse the order of subtraction Arg1-Arg0 */
|
||||||
|
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_SUBTRACT_ARB);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef(5.0, 1.0, 0.0);
|
||||||
|
glCallList(1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glActiveTextureARB (GL_TEXTURE1_ARB); /* deactivate multitexturing */
|
||||||
|
glDisable (GL_TEXTURE_2D);
|
||||||
|
glActiveTextureARB (GL_TEXTURE0_ARB); /* activate single texture unit */
|
||||||
|
|
||||||
|
glFlush();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void reshape(int w, int h)
|
||||||
|
{
|
||||||
|
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
gluOrtho2D(0.0, 7.0, 0.0, 7.0);
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadIdentity();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void keyboard (unsigned char key, int x, int y)
|
||||||
|
{
|
||||||
|
switch (key) {
|
||||||
|
case 27:
|
||||||
|
exit(0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
glutInit(&argc, argv);
|
||||||
|
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
|
||||||
|
glutInitWindowSize(400, 400);
|
||||||
|
glutInitWindowPosition(100, 100);
|
||||||
|
glutCreateWindow(argv[0]);
|
||||||
|
init();
|
||||||
|
glutDisplayFunc(display);
|
||||||
|
glutReshapeFunc(reshape);
|
||||||
|
glutKeyboardFunc(keyboard);
|
||||||
|
glutMainLoop();
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,206 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1993-2003, 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.
|
||||||
|
* 1500 Crittenden Lane
|
||||||
|
* Mountain View, CA 94043
|
||||||
|
* United State of America
|
||||||
|
*
|
||||||
|
* OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* convolution.c
|
||||||
|
* Use various 2D convolutions filters to find edges in an image.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include <GL/glut.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
static GLuint bswap(GLuint x)
|
||||||
|
{
|
||||||
|
const GLuint ui = 1;
|
||||||
|
const GLubyte *ubp = (const GLubyte *) &ui;
|
||||||
|
if (*ubp == 1) {
|
||||||
|
/* we're on little endiang so byteswap x */
|
||||||
|
GLsizei y = ((x >> 24)
|
||||||
|
| ((x >> 8) & 0xff00)
|
||||||
|
| ((x << 8) & 0xff0000)
|
||||||
|
| ((x << 24) & 0xff000000));
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static GLubyte *
|
||||||
|
readImage( const char* filename, GLsizei* width, GLsizei *height )
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
GLubyte* pixels;
|
||||||
|
|
||||||
|
FILE* infile = fopen( filename, "rb" );
|
||||||
|
|
||||||
|
if ( !infile ) {
|
||||||
|
fprintf( stderr, "Unable to open file '%s'\n", filename );
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fread( width, sizeof( GLsizei ), 1, infile );
|
||||||
|
fread( height, sizeof( GLsizei ), 1, infile );
|
||||||
|
|
||||||
|
*width = bswap(*width);
|
||||||
|
*height = bswap(*height);
|
||||||
|
|
||||||
|
assert(*width > 0);
|
||||||
|
assert(*height > 0);
|
||||||
|
|
||||||
|
n = 3 * (*width) * (*height);
|
||||||
|
|
||||||
|
pixels = (GLubyte *) malloc( n * sizeof( GLubyte ));
|
||||||
|
if ( !pixels ) {
|
||||||
|
fprintf( stderr, "Unable to malloc() bytes for pixels\n" );
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
fread( pixels, sizeof( GLubyte ), n, infile );
|
||||||
|
|
||||||
|
fclose( infile );
|
||||||
|
|
||||||
|
return pixels;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GLubyte *pixels;
|
||||||
|
GLsizei width, height;
|
||||||
|
|
||||||
|
GLfloat horizontal[3][3] = {
|
||||||
|
{ 0, -1, 0 },
|
||||||
|
{ 0, 1, 0 },
|
||||||
|
{ 0, 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
GLfloat vertical[3][3] = {
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ -1, 1, 0 },
|
||||||
|
{ 0, 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
GLfloat laplacian[3][3] = {
|
||||||
|
{ -0.125, -0.125, -0.125 },
|
||||||
|
{ -0.125, 1.0 , -0.125 },
|
||||||
|
{ -0.125, -0.125, -0.125 },
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static void init(void)
|
||||||
|
{
|
||||||
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
|
glClearColor(0.0, 0.0, 0.0, 0.0);
|
||||||
|
|
||||||
|
printf("Using the horizontal filter\n");
|
||||||
|
glConvolutionFilter2D(GL_CONVOLUTION_2D, GL_LUMINANCE,
|
||||||
|
3, 3, GL_LUMINANCE, GL_FLOAT, horizontal);
|
||||||
|
glEnable(GL_CONVOLUTION_2D);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void display(void)
|
||||||
|
{
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
glRasterPos2i( 1, 1);
|
||||||
|
glDrawPixels(width, height, GL_RGB, GL_UNSIGNED_BYTE, pixels);
|
||||||
|
glFlush();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void reshape(int w, int h)
|
||||||
|
{
|
||||||
|
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
glOrtho(0, w, 0, h, -1.0, 1.0);
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void keyboard(unsigned char key, int x, int y)
|
||||||
|
{
|
||||||
|
switch (key) {
|
||||||
|
case 'h' :
|
||||||
|
printf("Using a horizontal filter\n");
|
||||||
|
glConvolutionFilter2D(GL_CONVOLUTION_2D, GL_LUMINANCE, 3, 3,
|
||||||
|
GL_LUMINANCE, GL_FLOAT, horizontal);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'v' :
|
||||||
|
printf("Using the vertical filter\n");
|
||||||
|
glConvolutionFilter2D(GL_CONVOLUTION_2D, GL_LUMINANCE, 3, 3,
|
||||||
|
GL_LUMINANCE, GL_FLOAT, vertical);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'l' :
|
||||||
|
printf("Using the laplacian filter\n");
|
||||||
|
glConvolutionFilter2D(GL_CONVOLUTION_2D, GL_LUMINANCE, 3, 3,
|
||||||
|
GL_LUMINANCE, GL_FLOAT, laplacian);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 27:
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
glutPostRedisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main Loop
|
||||||
|
* Open window with initial window size, title bar,
|
||||||
|
* RGBA display mode, and handle input events.
|
||||||
|
*/
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
pixels = readImage("leeds.bin", &width, &height);
|
||||||
|
|
||||||
|
glutInit(&argc, argv);
|
||||||
|
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
|
||||||
|
glutInitWindowSize(width, height);
|
||||||
|
glutInitWindowPosition(100, 100);
|
||||||
|
glutCreateWindow(argv[0]);
|
||||||
|
init();
|
||||||
|
glutReshapeFunc(reshape);
|
||||||
|
glutKeyboardFunc(keyboard);
|
||||||
|
glutDisplayFunc(display);
|
||||||
|
glutMainLoop();
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,205 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1993-2003, 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.
|
||||||
|
* 1500 Crittenden Lane
|
||||||
|
* Mountain View, CA 94043
|
||||||
|
* United State of America
|
||||||
|
*
|
||||||
|
* OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* cubemap.c
|
||||||
|
*
|
||||||
|
* This program demonstrates cube map textures.
|
||||||
|
* Six different colored checker board textures are
|
||||||
|
* created and applied to a lit sphere.
|
||||||
|
*
|
||||||
|
* Pressing the 'f' and 'b' keys translate the viewer
|
||||||
|
* forward and backward.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <GL/glut.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define imageSize 4
|
||||||
|
static GLubyte image1[imageSize][imageSize][4];
|
||||||
|
static GLubyte image2[imageSize][imageSize][4];
|
||||||
|
static GLubyte image3[imageSize][imageSize][4];
|
||||||
|
static GLubyte image4[imageSize][imageSize][4];
|
||||||
|
static GLubyte image5[imageSize][imageSize][4];
|
||||||
|
static GLubyte image6[imageSize][imageSize][4];
|
||||||
|
|
||||||
|
static GLdouble ztrans = 0.0;
|
||||||
|
|
||||||
|
static void makeImages(void)
|
||||||
|
{
|
||||||
|
int i, j, c;
|
||||||
|
|
||||||
|
for (i = 0; i < imageSize; i++) {
|
||||||
|
for (j = 0; j < imageSize; j++) {
|
||||||
|
c = ( ((i & 0x1) == 0) ^ ((j & 0x1) == 0) ) * 255;
|
||||||
|
image1[i][j][0] = (GLubyte) c;
|
||||||
|
image1[i][j][1] = (GLubyte) c;
|
||||||
|
image1[i][j][2] = (GLubyte) c;
|
||||||
|
image1[i][j][3] = (GLubyte) 255;
|
||||||
|
|
||||||
|
image2[i][j][0] = (GLubyte) c;
|
||||||
|
image2[i][j][1] = (GLubyte) c;
|
||||||
|
image2[i][j][2] = (GLubyte) 0;
|
||||||
|
image2[i][j][3] = (GLubyte) 255;
|
||||||
|
|
||||||
|
image3[i][j][0] = (GLubyte) c;
|
||||||
|
image3[i][j][1] = (GLubyte) 0;
|
||||||
|
image3[i][j][2] = (GLubyte) c;
|
||||||
|
image3[i][j][3] = (GLubyte) 255;
|
||||||
|
|
||||||
|
image4[i][j][0] = (GLubyte) 0;
|
||||||
|
image4[i][j][1] = (GLubyte) c;
|
||||||
|
image4[i][j][2] = (GLubyte) c;
|
||||||
|
image4[i][j][3] = (GLubyte) 255;
|
||||||
|
|
||||||
|
image5[i][j][0] = (GLubyte) 255;
|
||||||
|
image5[i][j][1] = (GLubyte) c;
|
||||||
|
image5[i][j][2] = (GLubyte) c;
|
||||||
|
image5[i][j][3] = (GLubyte) 255;
|
||||||
|
|
||||||
|
image6[i][j][0] = (GLubyte) c;
|
||||||
|
image6[i][j][1] = (GLubyte) c;
|
||||||
|
image6[i][j][2] = (GLubyte) 255;
|
||||||
|
image6[i][j][3] = (GLubyte) 255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void init(void)
|
||||||
|
{
|
||||||
|
GLfloat diffuse[4] = {1.0, 1.0, 1.0, 1.0};
|
||||||
|
|
||||||
|
glClearColor (0.0, 0.0, 0.0, 0.0);
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glShadeModel(GL_SMOOTH);
|
||||||
|
|
||||||
|
makeImages();
|
||||||
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
|
glTexParameteri(GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_WRAP_R, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT, 0, GL_RGBA, imageSize,
|
||||||
|
imageSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, image1);
|
||||||
|
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT, 0, GL_RGBA, imageSize,
|
||||||
|
imageSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, image4);
|
||||||
|
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT, 0, GL_RGBA, imageSize,
|
||||||
|
imageSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, image2);
|
||||||
|
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT, 0, GL_RGBA, imageSize,
|
||||||
|
imageSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, image5);
|
||||||
|
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT, 0, GL_RGBA, imageSize,
|
||||||
|
imageSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, image3);
|
||||||
|
glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT, 0, GL_RGBA, imageSize,
|
||||||
|
imageSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, image6);
|
||||||
|
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT);
|
||||||
|
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT);
|
||||||
|
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_NORMAL_MAP_EXT);
|
||||||
|
glEnable(GL_TEXTURE_GEN_S);
|
||||||
|
glEnable(GL_TEXTURE_GEN_T);
|
||||||
|
glEnable(GL_TEXTURE_GEN_R);
|
||||||
|
|
||||||
|
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||||
|
|
||||||
|
glEnable(GL_TEXTURE_CUBE_MAP_EXT);
|
||||||
|
glEnable(GL_LIGHTING);
|
||||||
|
glEnable(GL_LIGHT0);
|
||||||
|
glEnable(GL_AUTO_NORMAL);
|
||||||
|
glEnable(GL_NORMALIZE);
|
||||||
|
glMaterialfv (GL_FRONT, GL_DIFFUSE, diffuse);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void display(void)
|
||||||
|
{
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
glPushMatrix ();
|
||||||
|
glTranslatef (0.0, 0.0, ztrans);
|
||||||
|
glutSolidSphere (5.0, 20, 10);
|
||||||
|
glPopMatrix ();
|
||||||
|
glutSwapBuffers();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void reshape(int w, int h)
|
||||||
|
{
|
||||||
|
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
gluPerspective(40.0, (GLfloat) w/(GLfloat) h, 1.0, 300.0);
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadIdentity();
|
||||||
|
glTranslatef(0.0, 0.0, -20.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void keyboard (unsigned char key, int x, int y)
|
||||||
|
{
|
||||||
|
switch (key) {
|
||||||
|
case 'f':
|
||||||
|
ztrans = ztrans - 0.2;
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case 'b':
|
||||||
|
ztrans = ztrans + 0.2;
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case 27:
|
||||||
|
exit(0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
glutInit(&argc, argv);
|
||||||
|
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
|
||||||
|
glutInitWindowSize(400, 400);
|
||||||
|
glutInitWindowPosition(100, 100);
|
||||||
|
glutCreateWindow (argv[0]);
|
||||||
|
init ();
|
||||||
|
glutDisplayFunc(display);
|
||||||
|
glutReshapeFunc(reshape);
|
||||||
|
glutKeyboardFunc(keyboard);
|
||||||
|
glutMainLoop();
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,194 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1993-2003, 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.
|
||||||
|
* 1500 Crittenden Lane
|
||||||
|
* Mountain View, CA 94043
|
||||||
|
* United State of America
|
||||||
|
*
|
||||||
|
* OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fogcoord.c
|
||||||
|
*
|
||||||
|
* This program demonstrates the use of explicit fog
|
||||||
|
* coordinates. You can press the keyboard and change
|
||||||
|
* the fog coordinate value at any vertex. You can
|
||||||
|
* also switch between using explicit fog coordinates
|
||||||
|
* and the default fog generation mode.
|
||||||
|
*
|
||||||
|
* Pressing the 'f' and 'b' keys move the viewer forward
|
||||||
|
* and backwards.
|
||||||
|
* Pressing 'c' initiates the default fog generation.
|
||||||
|
* Pressing capital 'C' restores explicit fog coordinates.
|
||||||
|
* Pressing '1', '2', '3', '8', '9', and '0' add or
|
||||||
|
* subtract from the fog coordinate values at one of the
|
||||||
|
* three vertices of the triangle.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define GL_GLEXT_PROTOTYPES
|
||||||
|
|
||||||
|
#include <GL/glut.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
static GLfloat f1, f2, f3;
|
||||||
|
|
||||||
|
/* Initialize fog
|
||||||
|
*/
|
||||||
|
static void init(void)
|
||||||
|
{
|
||||||
|
GLfloat fogColor[4] = {0.0, 0.25, 0.25, 1.0};
|
||||||
|
f1 = 1.0f;
|
||||||
|
f2 = 5.0f;
|
||||||
|
f3 = 10.0f;
|
||||||
|
|
||||||
|
glEnable(GL_FOG);
|
||||||
|
glFogi (GL_FOG_MODE, GL_EXP);
|
||||||
|
glFogfv (GL_FOG_COLOR, fogColor);
|
||||||
|
glFogf (GL_FOG_DENSITY, 0.25);
|
||||||
|
glHint (GL_FOG_HINT, GL_DONT_CARE);
|
||||||
|
glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT);
|
||||||
|
glClearColor(0.0, 0.25, 0.25, 1.0); /* fog color */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* display() draws a triangle at an angle.
|
||||||
|
*/
|
||||||
|
static void display(void)
|
||||||
|
{
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
glColor3f (1.0f, 0.75f, 0.0f);
|
||||||
|
glBegin (GL_TRIANGLES);
|
||||||
|
glFogCoordfEXT (f1);
|
||||||
|
glVertex3f (2.0f, -2.0f, 0.0f);
|
||||||
|
glFogCoordfEXT (f2);
|
||||||
|
glVertex3f (-2.0f, 0.0f, -5.0f);
|
||||||
|
glFogCoordfEXT (f3);
|
||||||
|
glVertex3f (0.0f, 2.0f, -10.0f);
|
||||||
|
glEnd();
|
||||||
|
|
||||||
|
glutSwapBuffers();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void reshape(int w, int h)
|
||||||
|
{
|
||||||
|
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
gluPerspective (45.0, 1.0, 0.25, 25.0);
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadIdentity ();
|
||||||
|
glTranslatef (0.0, 0.0, -5.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void keyboard(unsigned char key, int x, int y)
|
||||||
|
{
|
||||||
|
switch (key) {
|
||||||
|
case 'c':
|
||||||
|
glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FRAGMENT_DEPTH_EXT);
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case 'C':
|
||||||
|
glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT);
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case '1':
|
||||||
|
f1 = f1 + 0.25;
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case '2':
|
||||||
|
f2 = f2 + 0.25;
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case '3':
|
||||||
|
f3 = f3 + 0.25;
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case '8':
|
||||||
|
if (f1 > 0.25) {
|
||||||
|
f1 = f1 - 0.25;
|
||||||
|
glutPostRedisplay();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '9':
|
||||||
|
if (f2 > 0.25) {
|
||||||
|
f2 = f2 - 0.25;
|
||||||
|
glutPostRedisplay();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '0':
|
||||||
|
if (f3 > 0.25) {
|
||||||
|
f3 = f3 - 0.25;
|
||||||
|
glutPostRedisplay();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'b':
|
||||||
|
glMatrixMode (GL_MODELVIEW);
|
||||||
|
glTranslatef (0.0, 0.0, -0.25);
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case 'f':
|
||||||
|
glMatrixMode (GL_MODELVIEW);
|
||||||
|
glTranslatef (0.0, 0.0, 0.25);
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case 27:
|
||||||
|
exit(0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Main Loop
|
||||||
|
* Open window with initial window size, title bar,
|
||||||
|
* RGBA display mode, depth buffer, and handle input events.
|
||||||
|
*/
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
glutInit(&argc, argv);
|
||||||
|
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
|
||||||
|
glutInitWindowSize(500, 500);
|
||||||
|
glutCreateWindow(argv[0]);
|
||||||
|
init();
|
||||||
|
glutReshapeFunc (reshape);
|
||||||
|
glutKeyboardFunc (keyboard);
|
||||||
|
glutDisplayFunc (display);
|
||||||
|
glutMainLoop();
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,201 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1993-2003, 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.
|
||||||
|
* 1500 Crittenden Lane
|
||||||
|
* Mountain View, CA 94043
|
||||||
|
* United State of America
|
||||||
|
*
|
||||||
|
* OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* histogram.c
|
||||||
|
* Compute the histogram of the image. This program illustrates the
|
||||||
|
* use of the glHistogram() function.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <GL/glut.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define HISTOGRAM_SIZE 256 /* Must be a power of 2 */
|
||||||
|
|
||||||
|
|
||||||
|
static GLubyte *pixels;
|
||||||
|
static GLsizei width, height;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static GLuint bswap(GLuint x)
|
||||||
|
{
|
||||||
|
const GLuint ui = 1;
|
||||||
|
const GLubyte *ubp = (const GLubyte *) &ui;
|
||||||
|
if (*ubp == 1) {
|
||||||
|
/* we're on little endiang so byteswap x */
|
||||||
|
GLsizei y = ((x >> 24)
|
||||||
|
| ((x >> 8) & 0xff00)
|
||||||
|
| ((x << 8) & 0xff0000)
|
||||||
|
| ((x << 24) & 0xff000000));
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static GLubyte*
|
||||||
|
readImage( const char* filename, GLsizei* width, GLsizei *height )
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
GLubyte* pixels;
|
||||||
|
|
||||||
|
FILE* infile = fopen( filename, "rb" );
|
||||||
|
|
||||||
|
if ( !infile ) {
|
||||||
|
fprintf( stderr, "Unable to open file '%s'\n", filename );
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
fread( width, sizeof( GLsizei ), 1, infile );
|
||||||
|
fread( height, sizeof( GLsizei ), 1, infile );
|
||||||
|
|
||||||
|
*width = bswap(*width);
|
||||||
|
*height = bswap(*height);
|
||||||
|
|
||||||
|
n = 3 * (*width) * (*height);
|
||||||
|
|
||||||
|
pixels = (GLubyte *) malloc( n * sizeof( GLubyte ));
|
||||||
|
if ( !pixels ) {
|
||||||
|
fprintf( stderr, "Unable to malloc() bytes for pixels\n" );
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
fread( pixels, sizeof( GLubyte ), n, infile );
|
||||||
|
|
||||||
|
fclose( infile );
|
||||||
|
|
||||||
|
return pixels;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void init(void)
|
||||||
|
{
|
||||||
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
|
glClearColor(0.0, 0.0, 0.0, 0.0);
|
||||||
|
|
||||||
|
glHistogram(GL_HISTOGRAM, HISTOGRAM_SIZE, GL_RGB, GL_FALSE);
|
||||||
|
glEnable(GL_HISTOGRAM);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void display(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
GLushort values[HISTOGRAM_SIZE][3];
|
||||||
|
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
glRasterPos2i(1, 1);
|
||||||
|
glDrawPixels(width, height, GL_RGB, GL_UNSIGNED_BYTE, pixels);
|
||||||
|
|
||||||
|
glGetHistogram(GL_HISTOGRAM, GL_TRUE, GL_RGB, GL_UNSIGNED_SHORT, values);
|
||||||
|
|
||||||
|
/* Plot histogram */
|
||||||
|
|
||||||
|
glBegin(GL_LINE_STRIP);
|
||||||
|
glColor3f(1.0, 0.0, 0.0);
|
||||||
|
for ( i = 0; i < HISTOGRAM_SIZE; i++ )
|
||||||
|
glVertex2s(i, values[i][0]);
|
||||||
|
glEnd();
|
||||||
|
|
||||||
|
glBegin(GL_LINE_STRIP);
|
||||||
|
glColor3f(0.0, 1.0, 0.0);
|
||||||
|
for ( i = 0; i < HISTOGRAM_SIZE; i++ )
|
||||||
|
glVertex2s(i, values[i][1]);
|
||||||
|
glEnd();
|
||||||
|
|
||||||
|
glBegin(GL_LINE_STRIP);
|
||||||
|
glColor3f(0.0, 0.0, 1.0);
|
||||||
|
for ( i = 0; i < HISTOGRAM_SIZE; i++ )
|
||||||
|
glVertex2s(i, values[i][2]);
|
||||||
|
glEnd();
|
||||||
|
glFlush();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void reshape(int w, int h)
|
||||||
|
{
|
||||||
|
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
glOrtho(0, 256, 0, 10000, -1.0, 1.0);
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void keyboard(unsigned char key, int x, int y)
|
||||||
|
{
|
||||||
|
static GLboolean sink = GL_FALSE;
|
||||||
|
|
||||||
|
switch (key) {
|
||||||
|
case 's' :
|
||||||
|
sink = !sink;
|
||||||
|
glHistogram(GL_HISTOGRAM, HISTOGRAM_SIZE, GL_RGB, sink);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 27:
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
glutPostRedisplay();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main Loop
|
||||||
|
* Open window with initial window size, title bar,
|
||||||
|
* RGBA display mode, and handle input events.
|
||||||
|
*/
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
pixels = readImage("leeds.bin", &width, &height);
|
||||||
|
|
||||||
|
glutInit(&argc, argv);
|
||||||
|
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
|
||||||
|
glutInitWindowSize(width, height);
|
||||||
|
glutInitWindowPosition(100, 100);
|
||||||
|
glutCreateWindow(argv[0]);
|
||||||
|
init();
|
||||||
|
glutReshapeFunc(reshape);
|
||||||
|
glutKeyboardFunc(keyboard);
|
||||||
|
glutDisplayFunc(display);
|
||||||
|
glutMainLoop();
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,169 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1993-2003, 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.
|
||||||
|
* 1500 Crittenden Lane
|
||||||
|
* Mountain View, CA 94043
|
||||||
|
* United State of America
|
||||||
|
*
|
||||||
|
* OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* minmax.c
|
||||||
|
* Determine the minimum and maximum values of a group of pixels.
|
||||||
|
* This demonstrates use of the glMinmax() call.
|
||||||
|
*/
|
||||||
|
#include <GL/glut.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
static GLubyte *pixels;
|
||||||
|
static GLsizei width, height;
|
||||||
|
|
||||||
|
|
||||||
|
static GLuint bswap(GLuint x)
|
||||||
|
{
|
||||||
|
const GLuint ui = 1;
|
||||||
|
const GLubyte *ubp = (const GLubyte *) &ui;
|
||||||
|
if (*ubp == 1) {
|
||||||
|
/* we're on little endiang so byteswap x */
|
||||||
|
GLsizei y = ((x >> 24)
|
||||||
|
| ((x >> 8) & 0xff00)
|
||||||
|
| ((x << 8) & 0xff0000)
|
||||||
|
| ((x << 24) & 0xff000000));
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static GLubyte *
|
||||||
|
readImage( const char* filename, GLsizei* width, GLsizei *height )
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
GLubyte* pixels;
|
||||||
|
|
||||||
|
FILE* infile = fopen( filename, "rb" );
|
||||||
|
|
||||||
|
if ( !infile ) {
|
||||||
|
fprintf( stderr, "Unable to open file '%s'\n", filename );
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
fread( width, sizeof( GLsizei ), 1, infile );
|
||||||
|
fread( height, sizeof( GLsizei ), 1, infile );
|
||||||
|
|
||||||
|
*width = bswap(*width);
|
||||||
|
*height = bswap(*height);
|
||||||
|
|
||||||
|
n = 3 * (*width) * (*height);
|
||||||
|
|
||||||
|
pixels = (GLubyte *) malloc( n * sizeof( GLubyte ));
|
||||||
|
if ( !pixels ) {
|
||||||
|
fprintf( stderr, "Unable to malloc() bytes for pixels\n" );
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
fread( pixels, sizeof( GLubyte ), n, infile );
|
||||||
|
|
||||||
|
fclose( infile );
|
||||||
|
|
||||||
|
return pixels;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void init(void)
|
||||||
|
{
|
||||||
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
|
glClearColor(0.0, 0.0, 0.0, 0.0);
|
||||||
|
|
||||||
|
glMinmax(GL_MINMAX, GL_RGB, GL_FALSE);
|
||||||
|
glEnable(GL_MINMAX);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void display(void)
|
||||||
|
{
|
||||||
|
GLubyte values[6];
|
||||||
|
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
glRasterPos2i(1, 1);
|
||||||
|
glDrawPixels(width, height, GL_RGB, GL_UNSIGNED_BYTE, pixels);
|
||||||
|
glFlush();
|
||||||
|
|
||||||
|
glGetMinmax(GL_MINMAX, GL_TRUE, GL_RGB, GL_UNSIGNED_BYTE, values);
|
||||||
|
printf(" Red : min = %d max = %d\n", values[0], values[3]);
|
||||||
|
printf(" Green : min = %d max = %d\n", values[1], values[4]);
|
||||||
|
printf(" Blue : min = %d max = %d\n", values[2], values[5]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void reshape(int w, int h)
|
||||||
|
{
|
||||||
|
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
glOrtho(0, w, 0, h, -1.0, 1.0);
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void keyboard(unsigned char key, int x, int y)
|
||||||
|
{
|
||||||
|
switch (key) {
|
||||||
|
case 27:
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main Loop
|
||||||
|
* Open window with initial window size, title bar,
|
||||||
|
* RGBA display mode, and handle input events.
|
||||||
|
*/
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
pixels = readImage("leeds.bin", &width, &height);
|
||||||
|
|
||||||
|
glutInit(&argc, argv);
|
||||||
|
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
|
||||||
|
glutInitWindowSize(width, height);
|
||||||
|
glutInitWindowPosition(100, 100);
|
||||||
|
glutCreateWindow(argv[0]);
|
||||||
|
init();
|
||||||
|
glutReshapeFunc(reshape);
|
||||||
|
glutKeyboardFunc(keyboard);
|
||||||
|
glutDisplayFunc(display);
|
||||||
|
glutMainLoop();
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,188 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1993-2003, 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.
|
||||||
|
* 1500 Crittenden Lane
|
||||||
|
* Mountain View, CA 94043
|
||||||
|
* United State of America
|
||||||
|
*
|
||||||
|
* OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* multisamp.c
|
||||||
|
* This program draws shows how to use multisampling to
|
||||||
|
* draw anti-aliased geometric primitives. The same
|
||||||
|
* display list, a pinwheel of triangles and lines of
|
||||||
|
* varying widths, is rendered twice. Multisampling is
|
||||||
|
* enabled when the left side is drawn. Multisampling is
|
||||||
|
* disabled when the right side is drawn.
|
||||||
|
*
|
||||||
|
* Pressing the 'b' key toggles drawing of the checkerboard
|
||||||
|
* background. Antialiasing is sometimes easier to see
|
||||||
|
* when objects are rendered over a contrasting background.
|
||||||
|
*/
|
||||||
|
#include <GL/glut.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
static int bgtoggle = 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print out state values related to multisampling.
|
||||||
|
* Create display list with "pinwheel" of lines and
|
||||||
|
* triangles.
|
||||||
|
*/
|
||||||
|
static void init(void)
|
||||||
|
{
|
||||||
|
static GLint buf[1], sbuf[1];
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
glClearColor(0.0, 0.0, 0.0, 0.0);
|
||||||
|
glGetIntegerv (GL_SAMPLE_BUFFERS_ARB, buf);
|
||||||
|
printf ("number of sample buffers is %d\n", buf[0]);
|
||||||
|
glGetIntegerv (GL_SAMPLES_ARB, sbuf);
|
||||||
|
printf ("number of samples is %d\n", sbuf[0]);
|
||||||
|
|
||||||
|
glNewList (1, GL_COMPILE);
|
||||||
|
for (i = 0; i < 19; i++) {
|
||||||
|
glPushMatrix();
|
||||||
|
glRotatef(360.0*(float)i/19.0, 0.0, 0.0, 1.0);
|
||||||
|
glColor3f (1.0, 1.0, 1.0);
|
||||||
|
glLineWidth((i%3)+1.0);
|
||||||
|
glBegin (GL_LINES);
|
||||||
|
glVertex2f (0.25, 0.05);
|
||||||
|
glVertex2f (0.9, 0.2);
|
||||||
|
glEnd ();
|
||||||
|
glColor3f (0.0, 1.0, 1.0);
|
||||||
|
glBegin (GL_TRIANGLES);
|
||||||
|
glVertex2f (0.25, 0.0);
|
||||||
|
glVertex2f (0.9, 0.0);
|
||||||
|
glVertex2f (0.875, 0.10);
|
||||||
|
glEnd ();
|
||||||
|
glPopMatrix();
|
||||||
|
}
|
||||||
|
glEndList ();
|
||||||
|
|
||||||
|
glNewList (2, GL_COMPILE);
|
||||||
|
glColor3f (1.0, 0.5, 0.0);
|
||||||
|
glBegin (GL_QUADS);
|
||||||
|
for (i = 0; i < 16; i++) {
|
||||||
|
for (j = 0; j < 16; j++) {
|
||||||
|
if (((i + j) % 2) == 0) {
|
||||||
|
glVertex2f (-2.0 + (i * 0.25), -2.0 + (j * 0.25));
|
||||||
|
glVertex2f (-2.0 + (i * 0.25), -1.75 + (j * 0.25));
|
||||||
|
glVertex2f (-1.75 + (i * 0.25), -1.75 + (j * 0.25));
|
||||||
|
glVertex2f (-1.75 + (i * 0.25), -2.0 + (j * 0.25));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
glEnd ();
|
||||||
|
glEndList ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Draw two sets of primitives, so that you can
|
||||||
|
* compare the user of multisampling against its absence.
|
||||||
|
*
|
||||||
|
* This code enables antialiasing and draws one display list
|
||||||
|
* and disables and draws the other display list
|
||||||
|
*/
|
||||||
|
static void display(void)
|
||||||
|
{
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
if (bgtoggle)
|
||||||
|
glCallList (2);
|
||||||
|
|
||||||
|
glEnable (GL_MULTISAMPLE_ARB);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef (-1.0, 0.0, 0.0);
|
||||||
|
glCallList (1);
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glDisable (GL_MULTISAMPLE_ARB);
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef (1.0, 0.0, 0.0);
|
||||||
|
glCallList (1);
|
||||||
|
glPopMatrix();
|
||||||
|
glutSwapBuffers();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void reshape(int w, int h)
|
||||||
|
{
|
||||||
|
glViewport(0, 0, w, h);
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
if (w <= (2 * h))
|
||||||
|
gluOrtho2D (-2.0, 2.0,
|
||||||
|
-2.0*(GLfloat)h/(GLfloat)w, 2.0*(GLfloat)h/(GLfloat)w);
|
||||||
|
else
|
||||||
|
gluOrtho2D (-2.0*(GLfloat)w/(GLfloat)h,
|
||||||
|
2.0*(GLfloat)w/(GLfloat)h, -2.0, 2.0);
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadIdentity();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void keyboard(unsigned char key, int x, int y)
|
||||||
|
{
|
||||||
|
switch (key) {
|
||||||
|
case 'b':
|
||||||
|
case 'B':
|
||||||
|
bgtoggle = !bgtoggle;
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case 27: /* Escape Key */
|
||||||
|
exit(0);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main Loop
|
||||||
|
* Open window with initial window size, title bar,
|
||||||
|
* RGBA display mode, and handle input events.
|
||||||
|
*/
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
glutInit(&argc, argv);
|
||||||
|
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_MULTISAMPLE);
|
||||||
|
glutInitWindowSize (600, 300);
|
||||||
|
glutCreateWindow (argv[0]);
|
||||||
|
init();
|
||||||
|
glutReshapeFunc (reshape);
|
||||||
|
glutKeyboardFunc (keyboard);
|
||||||
|
glutDisplayFunc (display);
|
||||||
|
glutMainLoop();
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,175 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1993-2003, 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.
|
||||||
|
* 1500 Crittenden Lane
|
||||||
|
* Mountain View, CA 94043
|
||||||
|
* United State of America
|
||||||
|
*
|
||||||
|
* OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* multitex.c
|
||||||
|
*/
|
||||||
|
#include <GL/glut.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
static GLubyte texels0[32][32][4];
|
||||||
|
static GLubyte texels1[16][16][4];
|
||||||
|
|
||||||
|
static void makeCheckImages(void)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
for (i = 0; i < 32; i++) {
|
||||||
|
for (j = 0; j < 32; j++) {
|
||||||
|
texels0[i][j][0] = (GLubyte) (255 * i / 31);
|
||||||
|
texels0[i][j][1] = (GLubyte) (255 * j / 31);
|
||||||
|
texels0[i][j][2] = (GLubyte) (i*j)/255;
|
||||||
|
texels0[i][j][3] = (GLubyte) 255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 16; i++) {
|
||||||
|
for (j = 0; j < 16; j++) {
|
||||||
|
texels1[i][j][0] = (GLubyte) 255;
|
||||||
|
texels1[i][j][1] = (GLubyte) (255 * i / 15);
|
||||||
|
texels1[i][j][2] = (GLubyte) (255 * j / 15);
|
||||||
|
texels1[i][j][3] = (GLubyte) 255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void init(void)
|
||||||
|
{
|
||||||
|
GLuint texNames[2];
|
||||||
|
|
||||||
|
glClearColor (0.0, 0.0, 0.0, 0.0);
|
||||||
|
glShadeModel(GL_FLAT);
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
|
makeCheckImages();
|
||||||
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
|
|
||||||
|
glGenTextures(2, texNames);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texNames[0]);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA,
|
||||||
|
GL_UNSIGNED_BYTE, texels0);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
|
||||||
|
GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
|
||||||
|
GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texNames[1]);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA,
|
||||||
|
GL_UNSIGNED_BYTE, texels1);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
|
/* Use the two texture objects to define two texture units
|
||||||
|
* for use in multitexturing */
|
||||||
|
glActiveTextureARB (GL_TEXTURE0_ARB);
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texNames[0]);
|
||||||
|
glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
|
||||||
|
glMatrixMode (GL_TEXTURE);
|
||||||
|
glLoadIdentity();
|
||||||
|
glTranslatef(0.5f, 0.5f, 0.0f);
|
||||||
|
glRotatef(45.0f, 0.0f, 0.0f, 1.0f);
|
||||||
|
glTranslatef(-0.5f, -0.5f, 0.0f);
|
||||||
|
glMatrixMode (GL_MODELVIEW);
|
||||||
|
glActiveTextureARB (GL_TEXTURE1_ARB);
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, texNames[1]);
|
||||||
|
glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void display(void)
|
||||||
|
{
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
glBegin(GL_TRIANGLES);
|
||||||
|
glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 0.0, 0.0);
|
||||||
|
glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 1.0, 0.0);
|
||||||
|
glVertex2f(0.0, 0.0);
|
||||||
|
glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 0.5, 1.0);
|
||||||
|
glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 0.5, 0.0);
|
||||||
|
glVertex2f(50.0, 100.0);
|
||||||
|
glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 1.0, 0.0);
|
||||||
|
glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 1.0, 1.0);
|
||||||
|
glVertex2f(100.0, 0.0);
|
||||||
|
glEnd();
|
||||||
|
glFlush();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void reshape(int w, int h)
|
||||||
|
{
|
||||||
|
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
if (w <= h)
|
||||||
|
gluOrtho2D(0.0, 100.0, 0.0, 100.0 * (GLdouble)h/(GLdouble)w);
|
||||||
|
else
|
||||||
|
gluOrtho2D(0.0, 100.0 * (GLdouble)w/(GLdouble)h, 0.0, 100.0);
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadIdentity();
|
||||||
|
}
|
||||||
|
|
||||||
|
static 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(250, 250);
|
||||||
|
glutInitWindowPosition(100, 100);
|
||||||
|
glutCreateWindow(argv[0]);
|
||||||
|
init();
|
||||||
|
glutReshapeFunc(reshape);
|
||||||
|
glutDisplayFunc(display);
|
||||||
|
glutKeyboardFunc (keyboard);
|
||||||
|
glutMainLoop();
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,136 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1993-2003, 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.
|
||||||
|
* 1500 Crittenden Lane
|
||||||
|
* Mountain View, CA 94043
|
||||||
|
* United State of America
|
||||||
|
*
|
||||||
|
* OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* mvarray.c
|
||||||
|
* This program demonstrates multiple vertex arrays,
|
||||||
|
* specifically the OpenGL routine glMultiDrawElements().
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define GL_GLEXT_PROTOTYPES
|
||||||
|
|
||||||
|
#include <GL/glut.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifdef GL_VERSION_1_3
|
||||||
|
|
||||||
|
static void setupPointer(void)
|
||||||
|
{
|
||||||
|
static GLint vertices[] = {25, 25,
|
||||||
|
75, 75,
|
||||||
|
100, 125,
|
||||||
|
150, 75,
|
||||||
|
200, 175,
|
||||||
|
250, 150,
|
||||||
|
300, 125,
|
||||||
|
100, 200,
|
||||||
|
150, 250,
|
||||||
|
200, 225,
|
||||||
|
250, 300,
|
||||||
|
300, 250};
|
||||||
|
|
||||||
|
glEnableClientState (GL_VERTEX_ARRAY);
|
||||||
|
glVertexPointer (2, GL_INT, 0, vertices);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void init(void)
|
||||||
|
{
|
||||||
|
glClearColor (0.0, 0.0, 0.0, 0.0);
|
||||||
|
glShadeModel (GL_SMOOTH);
|
||||||
|
setupPointer ();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void display(void)
|
||||||
|
{
|
||||||
|
static GLubyte oneIndices[] = {0, 1, 2, 3, 4, 5, 6};
|
||||||
|
static GLubyte twoIndices[] = {1, 7, 8, 9, 10, 11};
|
||||||
|
static GLsizei count[] = {7, 6};
|
||||||
|
static GLvoid * indices[2] = {oneIndices, twoIndices};
|
||||||
|
|
||||||
|
glClear (GL_COLOR_BUFFER_BIT);
|
||||||
|
glColor3f (1.0, 1.0, 1.0);
|
||||||
|
glMultiDrawElementsEXT (GL_LINE_STRIP, count, GL_UNSIGNED_BYTE,
|
||||||
|
(const GLvoid **) indices, 2);
|
||||||
|
glFlush ();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void reshape (int w, int h)
|
||||||
|
{
|
||||||
|
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
|
||||||
|
glMatrixMode (GL_PROJECTION);
|
||||||
|
glLoadIdentity ();
|
||||||
|
gluOrtho2D (0.0, (GLdouble) w, 0.0, (GLdouble) h);
|
||||||
|
}
|
||||||
|
|
||||||
|
static 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);
|
||||||
|
glutInitWindowSize (350, 350);
|
||||||
|
glutInitWindowPosition (100, 100);
|
||||||
|
glutCreateWindow (argv[0]);
|
||||||
|
init ();
|
||||||
|
glutDisplayFunc(display);
|
||||||
|
glutReshapeFunc(reshape);
|
||||||
|
glutKeyboardFunc (keyboard);
|
||||||
|
glutMainLoop();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "This program demonstrates a feature which is not in OpenGL Version 1.0.\n");
|
||||||
|
fprintf (stderr, "If your implementation of OpenGL Version 1.0 has the right extensions,\n");
|
||||||
|
fprintf (stderr, "you may be able to modify this program to make it run.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -0,0 +1,179 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1993-2003, 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.
|
||||||
|
* 1500 Crittenden Lane
|
||||||
|
* Mountain View, CA 94043
|
||||||
|
* United State of America
|
||||||
|
*
|
||||||
|
* OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* pointp.c
|
||||||
|
* This program demonstrates point parameters and their effect
|
||||||
|
* on point primitives.
|
||||||
|
* 250 points are randomly generated within a 10 by 10 by 40
|
||||||
|
* region, centered at the origin. In some modes (including the
|
||||||
|
* default), points that are closer to the viewer will appear larger.
|
||||||
|
*
|
||||||
|
* Pressing the 'l', 'q', and 'c' keys switch the point
|
||||||
|
* parameters attenuation mode to linear, quadratic, or constant,
|
||||||
|
* respectively.
|
||||||
|
* Pressing the 'f' and 'b' keys move the viewer forward
|
||||||
|
* and backwards. In either linear or quadratic attenuation
|
||||||
|
* mode, the distance from the viewer to the point will change
|
||||||
|
* the size of the point primitive.
|
||||||
|
* Pressing the '+' and '-' keys will change the current point
|
||||||
|
* size. In this program, the point size is bounded, so it
|
||||||
|
* will not get less than 2.0, nor greater than GL_POINT_SIZE_MAX.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define GL_GLEXT_PROTOTYPES
|
||||||
|
|
||||||
|
#include <GL/glut.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
static GLfloat psize = 7.0;
|
||||||
|
static GLfloat pmax[1];
|
||||||
|
static GLfloat constant[3] = {1.0, 0.0, 0.0};
|
||||||
|
static GLfloat linear[3] = {0.0, 0.12, 0.0};
|
||||||
|
static GLfloat quadratic[3] = {0.0, 0.0, 0.01};
|
||||||
|
|
||||||
|
static void init(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
srand (12345);
|
||||||
|
|
||||||
|
glNewList(1, GL_COMPILE);
|
||||||
|
glBegin (GL_POINTS);
|
||||||
|
for (i = 0; i < 250; i++) {
|
||||||
|
glColor3f (1.0, ((rand()/(float) RAND_MAX) * 0.5) + 0.5,
|
||||||
|
rand()/(float) RAND_MAX);
|
||||||
|
/* randomly generated vertices:
|
||||||
|
-5 < x < 5; -5 < y < 5; -5 < z < -45 */
|
||||||
|
glVertex3f ( ((rand()/(float)RAND_MAX) * 10.0) - 5.0,
|
||||||
|
((rand()/(float)RAND_MAX) * 10.0) - 5.0,
|
||||||
|
((rand()/(float)RAND_MAX) * 40.0) - 45.0);
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
glEndList();
|
||||||
|
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glEnable(GL_POINT_SMOOTH);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
glPointSize(psize);
|
||||||
|
glGetFloatv(GL_POINT_SIZE_MAX_EXT, pmax);
|
||||||
|
|
||||||
|
glPointParameterfvEXT (GL_DISTANCE_ATTENUATION_EXT, linear);
|
||||||
|
glPointParameterfEXT (GL_POINT_FADE_THRESHOLD_SIZE_EXT, 2.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void display(void)
|
||||||
|
{
|
||||||
|
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
glCallList (1);
|
||||||
|
glutSwapBuffers ();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void reshape (int w, int h)
|
||||||
|
{
|
||||||
|
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
|
||||||
|
glMatrixMode (GL_PROJECTION);
|
||||||
|
glLoadIdentity ();
|
||||||
|
gluPerspective (35.0, 1.0, 0.25, 200.0);
|
||||||
|
glMatrixMode (GL_MODELVIEW);
|
||||||
|
glTranslatef (0.0, 0.0, -10.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void keyboard(unsigned char key, int x, int y)
|
||||||
|
{
|
||||||
|
switch (key) {
|
||||||
|
case 'b':
|
||||||
|
glMatrixMode (GL_MODELVIEW);
|
||||||
|
glTranslatef (0.0, 0.0, -0.5);
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
glPointParameterfvEXT (GL_DISTANCE_ATTENUATION_EXT, constant);
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case 'f':
|
||||||
|
glMatrixMode (GL_MODELVIEW);
|
||||||
|
glTranslatef (0.0, 0.0, 0.5);
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case 'l':
|
||||||
|
glPointParameterfvEXT (GL_DISTANCE_ATTENUATION_EXT, linear);
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case 'q':
|
||||||
|
glPointParameterfvEXT (GL_DISTANCE_ATTENUATION_EXT, quadratic);
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case '+':
|
||||||
|
if (psize < (pmax[0] + 1.0))
|
||||||
|
psize = psize + 1.0;
|
||||||
|
glPointSize (psize);
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case '-':
|
||||||
|
if (psize >= 2.0)
|
||||||
|
psize = psize - 1.0;
|
||||||
|
glPointSize (psize);
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case 27:
|
||||||
|
exit(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
glutInit(&argc, argv);
|
||||||
|
glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_MULTISAMPLE);
|
||||||
|
glutInitWindowSize (500, 500);
|
||||||
|
glutInitWindowPosition (100, 100);
|
||||||
|
glutCreateWindow (argv[0]);
|
||||||
|
init ();
|
||||||
|
glutDisplayFunc (display);
|
||||||
|
glutReshapeFunc (reshape);
|
||||||
|
glutKeyboardFunc (keyboard);
|
||||||
|
glutMainLoop();
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,352 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1993-2003, 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.
|
||||||
|
* 1500 Crittenden Lane
|
||||||
|
* Mountain View, CA 94043
|
||||||
|
* United State of America
|
||||||
|
*
|
||||||
|
* OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define GL_GLEXT_PROTOTYPES
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <GL/glut.h>
|
||||||
|
/*#include "helpers.h"*/
|
||||||
|
|
||||||
|
#define SHADOW_MAP_WIDTH 256
|
||||||
|
#define SHADOW_MAP_HEIGHT 256
|
||||||
|
|
||||||
|
#define PI 3.14159265359
|
||||||
|
|
||||||
|
GLdouble fovy = 60.0;
|
||||||
|
GLdouble nearPlane = 10.0;
|
||||||
|
GLdouble farPlane = 100.0;
|
||||||
|
|
||||||
|
GLfloat angle = 0.0;
|
||||||
|
GLfloat torusAngle = 0.0;
|
||||||
|
|
||||||
|
GLfloat lightPos[] = { 25.0, 25.0, 25.0, 1.0 };
|
||||||
|
GLfloat lookat[] = { 0.0, 0.0, 0.0 };
|
||||||
|
GLfloat up[] = { 0.0, 0.0, 1.0 };
|
||||||
|
|
||||||
|
GLboolean showShadow = GL_FALSE;
|
||||||
|
|
||||||
|
static void
|
||||||
|
init( void )
|
||||||
|
{
|
||||||
|
GLfloat white[] = { 1.0, 1.0, 1.0, 1.0 };
|
||||||
|
|
||||||
|
glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT,
|
||||||
|
SHADOW_MAP_WIDTH, SHADOW_MAP_HEIGHT, 0,
|
||||||
|
GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL );
|
||||||
|
|
||||||
|
glLightfv( GL_LIGHT0, GL_POSITION, lightPos );
|
||||||
|
glLightfv( GL_LIGHT0, GL_SPECULAR, white );
|
||||||
|
glLightfv( GL_LIGHT0, GL_DIFFUSE, white );
|
||||||
|
|
||||||
|
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
|
||||||
|
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
|
||||||
|
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
|
||||||
|
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
|
||||||
|
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL );
|
||||||
|
glTexParameteri( GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE );
|
||||||
|
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE,
|
||||||
|
GL_COMPARE_R_TO_TEXTURE );
|
||||||
|
|
||||||
|
glTexGeni( GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR );
|
||||||
|
glTexGeni( GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR );
|
||||||
|
glTexGeni( GL_R, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR );
|
||||||
|
glTexGeni( GL_Q, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR );
|
||||||
|
|
||||||
|
glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
|
||||||
|
|
||||||
|
glCullFace( GL_BACK );
|
||||||
|
|
||||||
|
glEnable( GL_DEPTH_TEST );
|
||||||
|
glEnable( GL_LIGHT0 );
|
||||||
|
glEnable( GL_LIGHTING );
|
||||||
|
glEnable( GL_TEXTURE_2D );
|
||||||
|
glEnable( GL_TEXTURE_GEN_S );
|
||||||
|
glEnable( GL_TEXTURE_GEN_T );
|
||||||
|
glEnable( GL_TEXTURE_GEN_R );
|
||||||
|
glEnable( GL_TEXTURE_GEN_Q );
|
||||||
|
glEnable( GL_COLOR_MATERIAL );
|
||||||
|
glEnable( GL_CULL_FACE );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
reshape( int width, int height )
|
||||||
|
{
|
||||||
|
glViewport( 0, 0, width, height );
|
||||||
|
|
||||||
|
glMatrixMode( GL_PROJECTION );
|
||||||
|
glLoadIdentity();
|
||||||
|
gluPerspective( fovy, (GLdouble) width/height, nearPlane, farPlane );
|
||||||
|
glMatrixMode( GL_MODELVIEW );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
idle( void )
|
||||||
|
{
|
||||||
|
angle += PI / 10000;
|
||||||
|
torusAngle += .1;
|
||||||
|
glutPostRedisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
keyboard( unsigned char key, int x, int y )
|
||||||
|
{
|
||||||
|
switch( key ) {
|
||||||
|
case 27: /* Escape */
|
||||||
|
exit( 0 );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 't': {
|
||||||
|
static GLboolean textureOn = GL_TRUE;
|
||||||
|
textureOn = !textureOn;
|
||||||
|
if ( textureOn )
|
||||||
|
glEnable( GL_TEXTURE_2D );
|
||||||
|
else
|
||||||
|
glDisable( GL_TEXTURE_2D );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'm': {
|
||||||
|
static GLboolean compareMode = GL_TRUE;
|
||||||
|
compareMode = !compareMode;
|
||||||
|
printf( "Compare mode %s\n", compareMode ? "On" : "Off" );
|
||||||
|
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE,
|
||||||
|
compareMode ? GL_COMPARE_R_TO_TEXTURE : GL_NONE );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'f': {
|
||||||
|
static GLboolean funcMode = GL_TRUE;
|
||||||
|
funcMode = !funcMode;
|
||||||
|
printf( "Operator %s\n", funcMode ? "GL_LEQUAL" : "GL_GEQUAL" );
|
||||||
|
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC,
|
||||||
|
funcMode ? GL_LEQUAL : GL_GEQUAL );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 's':
|
||||||
|
showShadow = !showShadow;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'p': {
|
||||||
|
static GLboolean animate = GL_TRUE;
|
||||||
|
animate = !animate;
|
||||||
|
glutIdleFunc( animate ? idle : NULL );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
glutPostRedisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
transposeMatrix( GLfloat m[16] )
|
||||||
|
{
|
||||||
|
GLfloat tmp;
|
||||||
|
#define Swap( a, b ) tmp = a; a = b; b = tmp
|
||||||
|
Swap( m[1], m[4] );
|
||||||
|
Swap( m[2], m[8] );
|
||||||
|
Swap( m[3], m[12] );
|
||||||
|
Swap( m[6], m[9] );
|
||||||
|
Swap( m[7], m[13] );
|
||||||
|
Swap( m[11], m[14] );
|
||||||
|
#undef Swap
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
drawObjects( GLboolean shadowRender )
|
||||||
|
{
|
||||||
|
GLboolean textureOn = glIsEnabled( GL_TEXTURE_2D );
|
||||||
|
|
||||||
|
if ( shadowRender )
|
||||||
|
glDisable( GL_TEXTURE_2D );
|
||||||
|
|
||||||
|
if ( !shadowRender ) {
|
||||||
|
glNormal3f( 0, 0, 1 );
|
||||||
|
glColor3f( 1, 1, 1 );
|
||||||
|
glRectf( -20.0, -20.0, 20.0, 20.0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef( 11, 11, 11 );
|
||||||
|
glRotatef( 54.73, -5, 5, 0 );
|
||||||
|
glRotatef( torusAngle, 1, 0, 0 );
|
||||||
|
glColor3f( 1, 0, 0 );
|
||||||
|
glutSolidTorus( 1, 4, 8, 36 );
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef( 2, 2, 2 );
|
||||||
|
glColor3f( 0, 0, 1 );
|
||||||
|
glutSolidCube( 4 );
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glPushMatrix();
|
||||||
|
glTranslatef( lightPos[0], lightPos[1], lightPos[2] );
|
||||||
|
glColor3f( 1, 1, 1 );
|
||||||
|
glutWireSphere( 0.5, 6, 6 );
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
if ( shadowRender && textureOn )
|
||||||
|
glEnable( GL_TEXTURE_2D );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
generateShadowMap( void )
|
||||||
|
{
|
||||||
|
GLint viewport[4];
|
||||||
|
GLfloat lightPos[4];
|
||||||
|
|
||||||
|
glGetLightfv( GL_LIGHT0, GL_POSITION, lightPos );
|
||||||
|
glGetIntegerv( GL_VIEWPORT, viewport );
|
||||||
|
|
||||||
|
glViewport( 0, 0, SHADOW_MAP_WIDTH, SHADOW_MAP_HEIGHT );
|
||||||
|
|
||||||
|
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||||
|
|
||||||
|
glMatrixMode( GL_PROJECTION );
|
||||||
|
glPushMatrix();
|
||||||
|
glLoadIdentity();
|
||||||
|
gluPerspective( 80.0, 1.0, 10.0, 1000.0 );
|
||||||
|
glMatrixMode( GL_MODELVIEW );
|
||||||
|
|
||||||
|
glPushMatrix();
|
||||||
|
glLoadIdentity();
|
||||||
|
gluLookAt( lightPos[0], lightPos[1], lightPos[2],
|
||||||
|
lookat[0], lookat[1], lookat[2],
|
||||||
|
up[0], up[1], up[2] );
|
||||||
|
|
||||||
|
drawObjects( GL_TRUE );
|
||||||
|
|
||||||
|
glPopMatrix();
|
||||||
|
glMatrixMode( GL_PROJECTION );
|
||||||
|
glPopMatrix();
|
||||||
|
glMatrixMode( GL_MODELVIEW );
|
||||||
|
|
||||||
|
glCopyTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 0, 0,
|
||||||
|
SHADOW_MAP_WIDTH, SHADOW_MAP_HEIGHT, 0 );
|
||||||
|
|
||||||
|
glViewport( viewport[0], viewport[1], viewport[2], viewport[3] );
|
||||||
|
|
||||||
|
if ( showShadow ) {
|
||||||
|
GLfloat depthImage[SHADOW_MAP_WIDTH][SHADOW_MAP_HEIGHT];
|
||||||
|
glReadPixels( 0, 0, SHADOW_MAP_WIDTH, SHADOW_MAP_HEIGHT,
|
||||||
|
GL_DEPTH_COMPONENT, GL_FLOAT, depthImage );
|
||||||
|
glWindowPos2f( viewport[2]/2, 0 );
|
||||||
|
glDrawPixels( SHADOW_MAP_WIDTH, SHADOW_MAP_HEIGHT, GL_LUMINANCE,
|
||||||
|
GL_FLOAT, depthImage );
|
||||||
|
glutSwapBuffers();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
generateTextureMatrix( void )
|
||||||
|
{
|
||||||
|
GLfloat tmpMatrix[16];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set up projective texture matrix. We use the GL_MODELVIEW matrix
|
||||||
|
* stack and OpenGL matrix commands to make the matrix.
|
||||||
|
*/
|
||||||
|
glPushMatrix();
|
||||||
|
glLoadIdentity();
|
||||||
|
glTranslatef( 0.5, 0.5, 0.0 );
|
||||||
|
glScalef( 0.5, 0.5, 1.0 );
|
||||||
|
gluPerspective( 60.0, 1.0, 1.0, 1000.0 );
|
||||||
|
gluLookAt( lightPos[0], lightPos[1], lightPos[2],
|
||||||
|
lookat[0], lookat[1], lookat[2],
|
||||||
|
up[0], up[1], up[2] );
|
||||||
|
glGetFloatv( GL_MODELVIEW_MATRIX, tmpMatrix );
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
transposeMatrix( tmpMatrix );
|
||||||
|
|
||||||
|
glTexGenfv( GL_S, GL_OBJECT_PLANE, &tmpMatrix[0] );
|
||||||
|
glTexGenfv( GL_T, GL_OBJECT_PLANE, &tmpMatrix[4] );
|
||||||
|
glTexGenfv( GL_R, GL_OBJECT_PLANE, &tmpMatrix[8] );
|
||||||
|
glTexGenfv( GL_Q, GL_OBJECT_PLANE, &tmpMatrix[12] );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
display( void )
|
||||||
|
{
|
||||||
|
GLfloat radius = 30;
|
||||||
|
|
||||||
|
generateShadowMap();
|
||||||
|
generateTextureMatrix();
|
||||||
|
|
||||||
|
if ( showShadow )
|
||||||
|
return;
|
||||||
|
|
||||||
|
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||||
|
|
||||||
|
glPushMatrix();
|
||||||
|
gluLookAt( radius*cos(angle), radius*sin(angle), 30,
|
||||||
|
lookat[0], lookat[1], lookat[2],
|
||||||
|
up[0], up[1], up[2] );
|
||||||
|
drawObjects( GL_FALSE );
|
||||||
|
glPopMatrix();
|
||||||
|
|
||||||
|
glutSwapBuffers();
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main( int argc, char** argv )
|
||||||
|
{
|
||||||
|
glutInit( &argc, argv );
|
||||||
|
glutInitDisplayMode( GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE );
|
||||||
|
glutInitWindowSize( 512, 512 );
|
||||||
|
glutInitWindowPosition( 100, 100 );
|
||||||
|
glutCreateWindow( argv[0] );
|
||||||
|
|
||||||
|
init();
|
||||||
|
|
||||||
|
glutDisplayFunc( display );
|
||||||
|
glutReshapeFunc( reshape );
|
||||||
|
glutKeyboardFunc( keyboard );
|
||||||
|
glutIdleFunc( idle );
|
||||||
|
|
||||||
|
glutMainLoop();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,280 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1993-2003, 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.
|
||||||
|
* 1500 Crittenden Lane
|
||||||
|
* Mountain View, CA 94043
|
||||||
|
* United State of America
|
||||||
|
*
|
||||||
|
* OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* surfpoints.c
|
||||||
|
* This program is a modification of the earlier surface.c
|
||||||
|
* program. The vertex data are not directly rendered,
|
||||||
|
* but are instead passed to the callback function.
|
||||||
|
* The values of the tessellated vertices are printed
|
||||||
|
* out there.
|
||||||
|
*
|
||||||
|
* This program draws a NURBS surface in the shape of a
|
||||||
|
* symmetrical hill. The 'c' keyboard key allows you to
|
||||||
|
* toggle the visibility of the control points themselves.
|
||||||
|
* Note that some of the control points are hidden by the
|
||||||
|
* surface itself.
|
||||||
|
*/
|
||||||
|
#include <GL/glut.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifdef GLU_VERSION_1_3
|
||||||
|
|
||||||
|
#ifndef CALLBACK
|
||||||
|
#define CALLBACK
|
||||||
|
#endif
|
||||||
|
|
||||||
|
GLfloat ctlpoints[4][4][3];
|
||||||
|
int showPoints = 0;
|
||||||
|
|
||||||
|
GLUnurbsObj *theNurb;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initializes the control points of the surface to a small hill.
|
||||||
|
* The control points range from -3 to +3 in x, y, and z
|
||||||
|
*/
|
||||||
|
static void init_surface(void)
|
||||||
|
{
|
||||||
|
int u, v;
|
||||||
|
for (u = 0; u < 4; u++) {
|
||||||
|
for (v = 0; v < 4; v++) {
|
||||||
|
ctlpoints[u][v][0] = 2.0*((GLfloat)u - 1.5);
|
||||||
|
ctlpoints[u][v][1] = 2.0*((GLfloat)v - 1.5);
|
||||||
|
|
||||||
|
if ( (u == 1 || u == 2) && (v == 1 || v == 2))
|
||||||
|
ctlpoints[u][v][2] = 3.0;
|
||||||
|
else
|
||||||
|
ctlpoints[u][v][2] = -3.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CALLBACK nurbsError(GLenum errorCode)
|
||||||
|
{
|
||||||
|
const GLubyte *estring;
|
||||||
|
|
||||||
|
estring = gluErrorString(errorCode);
|
||||||
|
fprintf (stderr, "Nurbs Error: %s\n", estring);
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CALLBACK beginCallback(GLenum whichType)
|
||||||
|
{
|
||||||
|
glBegin (whichType); /* resubmit rendering directive */
|
||||||
|
printf ("glBegin(");
|
||||||
|
switch (whichType) { /* print diagnostic message */
|
||||||
|
case GL_LINES:
|
||||||
|
printf ("GL_LINES)\n");
|
||||||
|
break;
|
||||||
|
case GL_LINE_LOOP:
|
||||||
|
printf ("GL_LINE_LOOP)\n");
|
||||||
|
break;
|
||||||
|
case GL_LINE_STRIP:
|
||||||
|
printf ("GL_LINE_STRIP)\n");
|
||||||
|
break;
|
||||||
|
case GL_TRIANGLES:
|
||||||
|
printf ("GL_TRIANGLES)\n");
|
||||||
|
break;
|
||||||
|
case GL_TRIANGLE_STRIP:
|
||||||
|
printf ("GL_TRIANGLE_STRIP)\n");
|
||||||
|
break;
|
||||||
|
case GL_TRIANGLE_FAN:
|
||||||
|
printf ("GL_TRIANGLE_FAN)\n");
|
||||||
|
break;
|
||||||
|
case GL_QUADS:
|
||||||
|
printf ("GL_QUADS)\n");
|
||||||
|
break;
|
||||||
|
case GL_QUAD_STRIP:
|
||||||
|
printf ("GL_QUAD_STRIP)\n");
|
||||||
|
break;
|
||||||
|
case GL_POLYGON:
|
||||||
|
printf ("GL_POLYGON)\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CALLBACK endCallback()
|
||||||
|
{
|
||||||
|
glEnd(); /* resubmit rendering directive */
|
||||||
|
printf ("glEnd()\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CALLBACK vertexCallback(GLfloat *vertex)
|
||||||
|
{
|
||||||
|
glVertex3fv(vertex); /* resubmit rendering directive */
|
||||||
|
printf ("glVertex3f (%5.3f, %5.3f, %5.3f)\n",
|
||||||
|
vertex[0], vertex[1], vertex[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CALLBACK normalCallback(GLfloat *normal)
|
||||||
|
{
|
||||||
|
glNormal3fv(normal); /* resubmit rendering directive */
|
||||||
|
printf ("glNormal3f (%5.3f, %5.3f, %5.3f)\n",
|
||||||
|
normal[0], normal[1], normal[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initialize material property and depth buffer.
|
||||||
|
*/
|
||||||
|
static void init(void)
|
||||||
|
{
|
||||||
|
GLfloat mat_diffuse[] = { 0.7, 0.7, 0.7, 1.0 };
|
||||||
|
GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
|
||||||
|
GLfloat mat_shininess[] = { 100.0 };
|
||||||
|
|
||||||
|
glClearColor (0.0, 0.0, 0.0, 0.0);
|
||||||
|
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
|
||||||
|
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
|
||||||
|
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
|
||||||
|
|
||||||
|
glEnable(GL_LIGHTING);
|
||||||
|
glEnable(GL_LIGHT0);
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glEnable(GL_AUTO_NORMAL);
|
||||||
|
glEnable(GL_NORMALIZE);
|
||||||
|
|
||||||
|
init_surface();
|
||||||
|
|
||||||
|
theNurb = gluNewNurbsRenderer();
|
||||||
|
gluNurbsProperty(theNurb, GLU_NURBS_MODE,
|
||||||
|
GLU_NURBS_TESSELLATOR);
|
||||||
|
gluNurbsProperty(theNurb, GLU_SAMPLING_TOLERANCE, 25.0);
|
||||||
|
gluNurbsProperty(theNurb, GLU_DISPLAY_MODE, GLU_FILL);
|
||||||
|
gluNurbsCallback(theNurb, GLU_ERROR, nurbsError);
|
||||||
|
gluNurbsCallback(theNurb, GLU_NURBS_BEGIN, beginCallback);
|
||||||
|
gluNurbsCallback(theNurb, GLU_NURBS_VERTEX, vertexCallback);
|
||||||
|
gluNurbsCallback(theNurb, GLU_NURBS_NORMAL, normalCallback);
|
||||||
|
gluNurbsCallback(theNurb, GLU_NURBS_END, endCallback);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void display(void)
|
||||||
|
{
|
||||||
|
GLfloat knots[8] = {0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0};
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
glPushMatrix();
|
||||||
|
glRotatef(330.0, 1.,0.,0.);
|
||||||
|
glScalef (0.5, 0.5, 0.5);
|
||||||
|
|
||||||
|
gluBeginSurface(theNurb);
|
||||||
|
gluNurbsSurface(theNurb,
|
||||||
|
8, knots, 8, knots,
|
||||||
|
4 * 3, 3, &ctlpoints[0][0][0],
|
||||||
|
4, 4, GL_MAP2_VERTEX_3);
|
||||||
|
gluEndSurface(theNurb);
|
||||||
|
|
||||||
|
if (showPoints) {
|
||||||
|
glPointSize(5.0);
|
||||||
|
glDisable(GL_LIGHTING);
|
||||||
|
glColor3f(1.0, 1.0, 0.0);
|
||||||
|
glBegin(GL_POINTS);
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
for (j = 0; j < 4; j++) {
|
||||||
|
glVertex3f(ctlpoints[i][j][0],
|
||||||
|
ctlpoints[i][j][1], ctlpoints[i][j][2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
glEnable(GL_LIGHTING);
|
||||||
|
}
|
||||||
|
glPopMatrix();
|
||||||
|
glFlush();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void reshape(int w, int h)
|
||||||
|
{
|
||||||
|
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
gluPerspective (45.0, (GLdouble)w/(GLdouble)h, 3.0, 8.0);
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadIdentity();
|
||||||
|
glTranslatef (0.0, 0.0, -5.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void keyboard(unsigned char key, int x, int y)
|
||||||
|
{
|
||||||
|
switch (key) {
|
||||||
|
case 'c':
|
||||||
|
case 'C':
|
||||||
|
showPoints = !showPoints;
|
||||||
|
glutPostRedisplay();
|
||||||
|
break;
|
||||||
|
case 27:
|
||||||
|
exit(0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
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();
|
||||||
|
glutReshapeFunc(reshape);
|
||||||
|
glutDisplayFunc(display);
|
||||||
|
glutKeyboardFunc (keyboard);
|
||||||
|
glutMainLoop();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "This program demonstrates a feature which is introduced in the\n");
|
||||||
|
fprintf (stderr, "OpenGL Utility Library (GLU) Version 1.3.\n");
|
||||||
|
fprintf (stderr, "If your implementation of GLU has the right extensions,\n");
|
||||||
|
fprintf (stderr, "you may be able to modify this program to make it run.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,161 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1993-2003, 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.
|
||||||
|
* 1500 Crittenden Lane
|
||||||
|
* Mountain View, CA 94043
|
||||||
|
* United State of America
|
||||||
|
*
|
||||||
|
* OpenGL(R) is a registered trademark of Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* texture3d.c
|
||||||
|
* This program demonstrates using a three-dimensional texture.
|
||||||
|
* It creates a 3D texture and then renders two rectangles
|
||||||
|
* with different texture coordinates to obtain different
|
||||||
|
* "slices" of the 3D texture.
|
||||||
|
*/
|
||||||
|
#include <GL/glut.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifdef GL_VERSION_1_2
|
||||||
|
#define iWidth 16
|
||||||
|
#define iHeight 16
|
||||||
|
#define iDepth 16
|
||||||
|
|
||||||
|
static GLubyte image[iDepth][iHeight][iWidth][3];
|
||||||
|
static GLuint texName;
|
||||||
|
|
||||||
|
/* Create a 16x16x16x3 array with different color values in
|
||||||
|
* each array element [r, g, b]. Values range from 0 to 255.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void makeImage(void)
|
||||||
|
{
|
||||||
|
int s, t, r;
|
||||||
|
|
||||||
|
for (s = 0; s < 16; s++)
|
||||||
|
for (t = 0; t < 16; t++)
|
||||||
|
for (r = 0; r < 16; r++) {
|
||||||
|
image[r][t][s][0] = (GLubyte) (s * 17);
|
||||||
|
image[r][t][s][1] = (GLubyte) (t * 17);
|
||||||
|
image[r][t][s][2] = (GLubyte) (r * 17);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void init(void)
|
||||||
|
{
|
||||||
|
glClearColor (0.0, 0.0, 0.0, 0.0);
|
||||||
|
glShadeModel(GL_FLAT);
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
|
makeImage();
|
||||||
|
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||||
|
|
||||||
|
glGenTextures(1, &texName);
|
||||||
|
glBindTexture(GL_TEXTURE_3D, texName);
|
||||||
|
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||||
|
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||||
|
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP);
|
||||||
|
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER,
|
||||||
|
GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER,
|
||||||
|
GL_NEAREST);
|
||||||
|
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, iWidth, iHeight,
|
||||||
|
iDepth, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
|
||||||
|
glEnable(GL_TEXTURE_3D);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void display(void)
|
||||||
|
{
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
glBegin(GL_QUADS);
|
||||||
|
glTexCoord3f(0.0, 0.0, 0.0); glVertex3f(-2.25, -1.0, 0.0);
|
||||||
|
glTexCoord3f(0.0, 1.0, 0.0); glVertex3f(-2.25, 1.0, 0.0);
|
||||||
|
glTexCoord3f(1.0, 1.0, 1.0); glVertex3f(-0.25, 1.0, 0.0);
|
||||||
|
glTexCoord3f(1.0, 0.0, 1.0); glVertex3f(-0.25, -1.0, 0.0);
|
||||||
|
|
||||||
|
glTexCoord3f(0.0, 0.0, 1.0); glVertex3f(0.25, -1.0, 0.0);
|
||||||
|
glTexCoord3f(0.0, 1.0, 1.0); glVertex3f(0.25, 1.0, 0.0);
|
||||||
|
glTexCoord3f(1.0, 1.0, 0.0); glVertex3f(2.25, 1.0, 0.0);
|
||||||
|
glTexCoord3f(1.0, 0.0, 0.0); glVertex3f(2.25, -1.0, 0.0);
|
||||||
|
glEnd();
|
||||||
|
glFlush();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void reshape(int w, int h)
|
||||||
|
{
|
||||||
|
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 30.0);
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadIdentity();
|
||||||
|
glTranslatef(0.0, 0.0, -4.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static 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(250, 250);
|
||||||
|
glutInitWindowPosition(100, 100);
|
||||||
|
glutCreateWindow(argv[0]);
|
||||||
|
init();
|
||||||
|
glutReshapeFunc(reshape);
|
||||||
|
glutDisplayFunc(display);
|
||||||
|
glutKeyboardFunc (keyboard);
|
||||||
|
glutMainLoop();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
fprintf (stderr, "This program demonstrates a feature which is not in OpenGL Version 1.0 or 1.1.\n");
|
||||||
|
fprintf (stderr, "If your implementation of OpenGL has the right extensions,\n");
|
||||||
|
fprintf (stderr, "you may be able to modify this program to make it run.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue