/*
* 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];
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;
}
}
}
void init(void)
{
GLint numunits[1];
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 ();
}
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();
/*
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
glStudy.rar (84个子文件)
glStudy
glStudy.suo 7KB
ch1
hello.c 3KB
ch1.vcproj.DUWEI.wwan.user 1KB
ch1.vcproj 4KB
double.c 4KB
teapots.c 8KB
Data
leeds.bin 704KB
ch12
surface.c 6KB
texturesurf.c 5KB
surfpoints.c 8KB
bezsurf.c 4KB
bezcurve.c 4KB
bezmesh.c 5KB
trim.c 6KB
ch8
histogram.c 4KB
minmax.c 4KB
colortable.c 4KB
drawf.c 4KB
colormatrix.c 4KB
font.c 6KB
image.c 5KB
convolution.c 4KB
INDEX 2KB
ch13
select.c 7KB
pickdepth.c 6KB
picksquare.c 6KB
feedback.c 5KB
readImage.c 3KB
glStudy.sln 874B
ch4
smooth.c 3KB
ch5
light.c 4KB
material.c 11KB
movelight.c 5KB
scene.c 4KB
colormat.c 5KB
ch10
accpersp.c 8KB
accanti.c 6KB
stencil.c 6KB
jitter.h 6KB
dof.c 9KB
glStudy.ncb 27KB
ch7
stroke.c 6KB
torus.c 4KB
list.c 4KB
README 4KB
ch11
quadric.c 6KB
tess.c 7KB
tesswind.c 9KB
Imakefile 8KB
ch6
blendeqn.c 5KB
aargb.c 5KB
polyoff.c 7KB
multisamp.c 6KB
aaindex.c 5KB
fog.c 6KB
alpha.c 4KB
fogindex.c 4KB
fogcoord.c 6KB
pointp.c 6KB
alpha3D.c 5KB
Makefile 3KB
ch9
combiner.c 13KB
texture3d.c 5KB
wrap.c 6KB
texprox.c 4KB
texbind.c 6KB
multitex.c 6KB
mipmap.c 6KB
texsub.c 7KB
cubemap.c 7KB
texgen.c 7KB
shadowmap.c 10KB
checker.c 5KB
ch2
polys.c 5KB
mvarray.c 4KB
lines.c 5KB
varray.c 6KB
Makefile.win 4KB
ch3
cube.c 3KB
robot.c 4KB
planet.c 4KB
clip.c 3KB
unproject.c 4KB
model.c 4KB
共 84 条
- 1
_uniqs
- 粉丝: 53
- 资源: 94
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页