⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 景深.cpp

📁 C++源代码集
💻 CPP
字号:
#include<windows.h>
#include<math.h>
#include<GL/gl.h>
#include<GL/glu.h>
#include<GL/glaux.h>

#pragma comment(lib,"opengl32")
#pragma comment(lib,"glu32")
#pragma comment(lib,"glaux")

typedef struct
{
	GLfloat x;
	GLfloat y;
}jitter_point;

#define MAX_SAMPLES 66

jitter_point j2[]=
{
	{0.246490,0.249999},
	{-0.246490,-0.249999}
};

jitter_point j3[]=
{
	{-0.373411,-0.250550},
	{0.256263,0.368119},
	{0.117148,-0.117570}
};

jitter_point j4[]=
{
	{-0.208147,0.353730},
	{0.203849,-0.353780},
	{-0.292626,-0.149945},
	{0.296924,0.149994}
};

jitter_point j8[]=
{
	{-0.334818,0.435331},
	{0.286438,-0.393485},
	{0.459462,0.141540},
	{-0.414498,-0.192829},
	{-0.183790,-0.082102},
	{-0.079263,-0.317383},
	{0.102254,0.299133},
	{0.164216,-0.054399}
};

jitter_point j15[]=
{
	{0.285561,0.188437},
	{0.360176,-0.065688},
	{-0.111751,0.275019},
	{-0.055918,-0.215197},
	{-0.080231,-0.470965},
	{0.138721,0.409168},
	{0.384120,0.458500},
	{-0.454968,0.134088},
	{0.179271,-0.331196},
	{-0.307049,-0.364927},
	{0.105354,-0.010099},
	{-0.154180,0.021794},
	{-0.370135,-0.116425},
	{0.451636,-0.300013},
	{-0.370610,0.387504}
};

jitter_point j24[]=
{
	{0.030245,0.136384},
	{0.018865,-0.348867},
	{-0.350114,-0.472309},
	{0.222181,0.149524},
	{-0.393670,-0.266873},
	{0.404568,0.230436},
	{0.098381,0.465337},
	{0.462671,0.442116},
	{0.400373,-0.212720},
	{-0.409988,0.263345},
	{-0.115878,-0.001981},
	{0.348425,-0.009237},
	{-0.464016,0.066467},
	{-0.138674,-0.468006},
	{0.144932,-0.022780},
	{-0.250195,0.150161},
	{-0.181400,-0.264219},
	{0.196097,-0.234139},
	{-0.311082,-0.078815},
	{0.268379,0.366778},
	{-0.040601,0.327109},
	{-0.234392,0.354659},
	{-0.003102,-0.154402},
	{0.297997,-0.417965}
};

jitter_point j66[]=
{
	{0.266377,-0.218171},
	{-0.170919,-0.429368},
	{0.047356,-0.387135},
	{-0.430063,0.363413},
	{-0.221638,-0.313768},
	{0.124758,-0.197109},
	{-0.400021,0.482195},
	{0.247882,0.152010},
	{-0.286709,-0.470214},
	{-0.426790,0.004977},
	{-0.361249,-0.104549},
	{-0.040643,0.123453},
	{-0.189296,0.438963},
	{-0.453521,-0.299889},
	{0.408216,-0.457699},
	{0.328973,-0.101914},
	{-0.055540,-0.477952},
	{0.194421,0.453510},
	{0.404051,0.224974},
	{0.310136,0.419700},
	{-0.021743,0.403898},
	{-0.466210,0.248839},
	{0.341369,0.081490},
	{0.124156,-0.016859},
	{-0.461321,-0.176661},
	{0.013210,0.234401},
	{0.174258,-0.311854},
	{0.294061,0.263364},
	{-0.114836,0.328189},
	{0.041206,-0.106205},
	{0.079227,0.345021},
	{-0.109319,-0.242380},
	{0.425005,-0.332397},
	{0.009146,0.015098},
	{-0.339084,-0.355707},
	{-0.224596,-0.189548},
	{0.083475,0.117028},
	{0.295962,-0.334699},
	{0.452998,0.025397},
	{0.206511,-0.104668},
	{0.447544,-0.096004},
	{-0.108006,-0.002471},
	{-0.380810,0.130036},
	{-0.242440,0.186934},
	{-0.200363,0.070863},
	{-0.344844,-0.230814},
	{0.408660,0.345826},
	{-0.233016,0.305203},
	{0.158475,-0.430762},
	{0.486972,0.139163},
	{-0.301610,0.009319},
	{0.282245,-0.458671},
	{0.482046,0.443890},
	{-0.121527,0.210223},
	{-0.447606,-0.424878},
	{-0.083941,-0.121440},
	{-0.345773,0.253779},
	{0.234646,0.034549},
	{0.394102,-0.210901},
	{-0.312571,0.397656},
	{0.200906,0.333293},
	{0.018703,-0.261792},
	{-0.209349,-0.065383},
	{0.076248,0.478538},
	{-0.073036,-0.355064},
	{0.145087,0.221726}
};

void Init(void);

void accFrustum(GLdouble left,GLdouble right,GLdouble bottom,
				GLdouble top,GLdouble znear, GLdouble zfar,
				GLdouble pixdx,GLdouble pixdy,GLdouble eyedx,
				GLdouble eyedy,GLdouble focus);

void accPerspective(GLdouble fovy,GLdouble aspect,GLdouble znear,
					GLdouble zfar,GLdouble pixdx,GLdouble pixdy,
					GLdouble eyedx,GLdouble eyedy,GLdouble focus);

void renderTeapot(GLfloat x,GLfloat y,GLfloat z,GLfloat ambr,
				  GLfloat ambg,GLfloat ambb,GLfloat difr,
				  GLfloat difg,GLfloat difb,GLfloat specr,
				  GLfloat specg,GLfloat specb,GLfloat shine);

void CALLBACK Resize(GLsizei w,GLsizei h);
void CALLBACK Paint(void);

#define PI_ 3.14159265358979323846

void accFrustum(GLdouble left,GLdouble right,GLdouble bottom,
				GLdouble top,GLdouble znear, GLdouble zfar,
				GLdouble pixdx,GLdouble pixdy,GLdouble eyedx,
				GLdouble eyedy,GLdouble focus)
{
	GLdouble xwsize,ywsize;
	GLdouble dx,dy;
	GLint viewport[4];

	glGetIntegerv(GL_VIEWPORT,viewport);

	xwsize=right-left;
	ywsize=top-bottom;

	dx=-(pixdx*xwsize/(GLdouble)viewport[2]+eyedx*znear/focus);
	dy=-(pixdy*ywsize/(GLdouble)viewport[3]+eyedy*znear/focus);

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	glFrustum(left+dx,right+dx,bottom+dy,top+dy,znear,zfar);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glTranslatef(-eyedx,-eyedy,0.0);
}

void accPerspective(GLdouble fovy,GLdouble aspect,GLdouble znear,
					GLdouble zfar,GLdouble pixdx,GLdouble pixdy,
					GLdouble eyedx,GLdouble eyedy,GLdouble focus)
{
	GLdouble fov2,left,right,bottom,top;

	fov2=((fovy*PI_)/180)/2.0;

	top=znear/(cos(fov2)/sin(fov2));
	bottom =-top;

	right=top*aspect;
	left=-right;

	accFrustum(left,right,bottom,top,znear,zfar,pixdx,pixdy,eyedx,eyedy,focus);
}

void Init(void)
{
	GLfloat ambient[]={0.0,0.0,0.0,1.0};
	GLfloat diffuse[]={1.0,1.0,1.0,1.0};
	GLfloat specular[]={1.0,1.0,1.0,1.0};
	GLfloat position[]={0.0,3.0,3.0,0.0};

	GLfloat lmodel_ambient[]={0.2,0.2,0.2,1.0};
	GLfloat local_view[]={0.0};

	glEnable(GL_DEPTH_TEST);
	glDepthFunc(GL_LESS);

	glLightfv(GL_LIGHT0,GL_AMBIENT,ambient);
	glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuse);
	glLightfv(GL_LIGHT0,GL_POSITION,position);

	glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient);
	glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER,local_view);

	glFrontFace(GL_CW);
	glEnable(GL_LIGHTING);
	glEnable(GL_LIGHT0);
	glEnable(GL_AUTO_NORMAL);
	glEnable(GL_NORMALIZE);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	glClearColor(0.0,0.0,0.0,0.0);
	glClearAccum(0.0,0.0,0.0,0.0);
}

void renderTeapot(GLfloat x,GLfloat y,GLfloat z,GLfloat ambr,
				  GLfloat ambg,GLfloat ambb,GLfloat difr,
				  GLfloat difg,GLfloat difb,GLfloat specr,
				  GLfloat specg,GLfloat specb,GLfloat shine)
{
	float mat[3];

	glPushMatrix();

	glTranslatef(x,y,z);
	mat[0]=ambr;mat[1]=ambg;mat[2]=ambb;
	glMaterialfv(GL_FRONT,GL_AMBIENT,mat);
	mat[0]=difr;mat[1]=difg;mat[2]=difb;
	glMaterialfv(GL_FRONT,GL_DIFFUSE,mat);
	mat[0]=specr;mat[1]=specg;mat[2]=specb;
	glMaterialfv(GL_FRONT,GL_SPECULAR,mat);
	glMaterialf(GL_FRONT,GL_SHININESS,shine*128.0);

	auxSolidTeapot(0.5);

	glPopMatrix();
}

void CALLBACK Paint(void)
{
	int jitter;
	GLint viewport[4];

	glGetIntegerv(GL_VIEWPORT,viewport);
	if(!viewport[3])return;
	glClear(GL_ACCUM_BUFFER_BIT);

	for(jitter=0;jitter<8;jitter++)
	{
		glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

		accPerspective(45.0,(GLdouble)viewport[2]/(GLdouble)viewport[3],
			1.0,15.0,0.0,0.0,0.33*j8[jitter].x,0.33*j8[jitter].y,5.0);

		renderTeapot(-1.1,-0.5,-4.5,0.1745,0.01175,0.01175,
			0.61424,0.04136,0.04136,0.727811,0.626959,0.626959,0.6);
		renderTeapot(-0.5,-0.5,-5.0,0.24725,0.1995,0.0745,
			0.75164,0.60648,0.22648,0.628281,0.555802,0.366065,0.4);
		renderTeapot(0.2,-0.5,-5.5,0.19225,0.19225,0.19225,
			0.50754,0.50754,0.50754,0.508273,0.508273,0.508273,0.4);
		renderTeapot(1.0,-0.5,-6.0,0.0215,0.1745,0.0215,
			0.07568,0.61424,0.07568,0.633,0.727811,0.633,0.6);
		renderTeapot(1.8,-0.5,-6.5,0.0,0.1,0.06,0.0,0.50980392,
			0.50980392,0.50196078,0.50196078,0.50196078,0.25);

		glAccum(GL_ACCUM,0.125);
		glFlush();
		auxSwapBuffers();
	}
	glAccum(GL_RETURN,1.0);
	glFlush();
	auxSwapBuffers();
}

void CALLBACK Resize(GLsizei w,GLsizei h)
{
	glViewport(0,0,w,h);
}

void main(void)
{
	auxInitDisplayMode(AUX_DOUBLE|AUX_RGB|AUX_ACCUM|AUX_DEPTH16);
	auxInitPosition(0,0,400,400);
	auxInitWindow("景深");

	Init();

	auxReshapeFunc(Resize);
	auxMainLoop(Paint);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -