コード例 #1
0
ファイル: AC_3095.c プロジェクト: simplyzhao/Code_Pearls
int
main(int argc, char **argv)
{
	int i;
	while(scanf("%s", seq)!=EOF && seq[0]!='#') {
		total = 0;
		len = strlen(seq);
		for(i=0; i<len; i++) {
			switch(seq[i]) {
				case '.':
					total += 100;
					break;
				case '_':
					break;
				case '/':
					total += (mountain(i, -1)*100);
					break;
				case '\\':
					total += (mountain(i, 1)*100);
					break;
				case '|':
					total += ((mountain(i, -1)+mountain(i, 1))*50);
					break;
			}
		}
		printf("%d\n", total/len);
	}
}
コード例 #2
0
ファイル: Mountain.cpp プロジェクト: novaintel/csci3161
void mountain(int level, GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2, GLfloat z2)
{
	GLfloat nx, ny, nz;
	nx = (x1 + x2) / 2.;
	ny = (y1 + y2) / 2.;
	nz = (z1 + z2) / 2.;

	nz += (rand() % 3 ? -1. : 1.) * nz / 5.;

	if (level)
	{
		mountain(level - 1, x1, y1, z1, nx, ny, nz);
		mountain(level - 1, nx, ny, nz, x1, y1, z1);
	}
	else
	{
		landpt[ptptr / 2].x = nx;
		landpt[ptptr / 2].y = ny;
		landpt[ptptr / 2].z = nz;

		if (landpt[ptptr / 2 - 1].x == x1 && landpt[ptptr / 2 - 1].y == y1)
			landpt[ptptr / 2 - 1].z = z1;

		ptptr++;
	}
}
コード例 #3
0
int main()
{
	int n;
	scanf("%d", &n);

	mountain(n);

	return 0;
} 
コード例 #4
0
// n 계단을 오를 수 있는 가짓 수
int mountain(int n)
{
	if (n == 1)
	{
		printf("\n");
		return 0;
	}

	if (num < n)
	{
		printf("%d", ++num);
		mountain(n);
	}
	else
	{
		printf("%d", n-1);	
		mountain(n - 1);
	}
}
コード例 #5
0
void makemountain()
{
	int i,j;

	if (verts) free(verts);
	if (norms) free(norms);
	if (faces) free(faces);

	verts = (GLfloat *)malloc(res*res*3*sizeof(GLfloat));
	norms = (GLfloat *)malloc(res*res*3*sizeof(GLfloat));
	faces = (GLuint *)malloc((res-1)*(res-1)*6*sizeof(GLuint));

	verts[ADDR(0,0,0)] = -5.0;
	verts[ADDR(0,0,1)] = -5.0;
	verts[ADDR(0,0,2)] = 0.0;

	verts[ADDR(res-1,0,0)] = 5.0;
	verts[ADDR(res-1,0,1)] = -5.0;
	verts[ADDR(res-1,0,2)] = 0.0;

	verts[ADDR(0,res-1,0)] = -5.0;
	verts[ADDR(0,res-1,1)] = 5.0;
	verts[ADDR(0,res-1,2)] = 0.0;

	verts[ADDR(res-1,res-1,0)] = 5.0;
	verts[ADDR(res-1,res-1,1)] = 5.0;
	verts[ADDR(res-1,res-1,2)] = 0.0;

	mountain(0,0,res-1);

	GLuint *f = faces;
	for (j = 0; j < res-1; j++) {
		for (i = 0; i < res-1; i++) {
			*f++ = j*res + i;
			*f++ = j*res + i + 1;
			*f++ = (j+1)*res + i + 1;
			*f++ = j*res + i;
			*f++ = (j+1)*res + i + 1;
			*f++ = (j+1)*res + i;
		}
	}

}
コード例 #6
0
void mountain(int i, int j, int s)
{
	if (s > 1) {

		float x0,y0,z0,x1,y1,z1,x2,y2,z2,x3,y3,z3,x01,y01,z01,x02,y02,z02,x13,y13,z13,x23,y23,z23,x0123,y0123,z0123;

		x0 = verts[ADDR(i,j,0)];
		y0 = verts[ADDR(i,j,1)];
		z0 = verts[ADDR(i,j,2)];

		x1 = verts[ADDR(i+s,j,0)];
		y1 = verts[ADDR(i+s,j,1)];
		z1 = verts[ADDR(i+s,j,2)];

		x2 = verts[ADDR(i,j+s,0)];
		y2 = verts[ADDR(i,j+s,1)];
		z2 = verts[ADDR(i,j+s,2)];

		x3 = verts[ADDR(i+s,j+s,0)];
		y3 = verts[ADDR(i+s,j+s,1)];
		z3 = verts[ADDR(i+s,j+s,2)];

		x01 = 0.5*(x0 + x1);
		y01 = 0.5*(y0 + y1);
		z01 = 0.5*(z0 + z1);

		x02 = 0.5*(x0 + x2);
		y02 = 0.5*(y0 + y2);
		z02 = 0.5*(z0 + z2);

		x13 = 0.5*(x1 + x3);
		y13 = 0.5*(y1 + y3);
		z13 = 0.5*(z1 + z3);

		x23 = 0.5*(x2 + x3);
		y23 = 0.5*(y2 + y3);
		z23 = 0.5*(z2 + z3);

		x0123 = 0.25*(x0 + x1 + x2 + x3);
		y0123 = 0.25*(y0 + y1 + y2 + y3);
		z0123 = 0.25*(z0 + z1 + z2 + z3);

		z01 += 0.5*((float)s/res)*frand(x01,y01);
		z02 += 0.5*((float)s/res)*frand(x02,y02);
		z13 += 0.5*((float)s/res)*frand(x13,y13);
		z23 += 0.5*((float)s/res)*frand(x23,y23);
		z0123 += 0.5*((float)s/res)*frand(x0123,y0123);

		verts[ADDR(i+s/2,j,0)] = x01;
		verts[ADDR(i+s/2,j,1)] = y01;
		verts[ADDR(i+s/2,j,2)] = z01;

		verts[ADDR(i,j+s/2,0)] = x02;
		verts[ADDR(i,j+s/2,1)] = y02;
		verts[ADDR(i,j+s/2,2)] = z02;

		verts[ADDR(i+s,j+s/2,0)] = x13;
		verts[ADDR(i+s,j+s/2,1)] = y13;
		verts[ADDR(i+s,j+s/2,2)] = z13;

		verts[ADDR(i+s/2,j+s,0)] = x23;
		verts[ADDR(i+s/2,j+s,1)] = y23;
		verts[ADDR(i+s/2,j+s,2)] = z23;

		verts[ADDR(i+s/2,j+s/2,0)] = x0123;
		verts[ADDR(i+s/2,j+s/2,1)] = y0123;
		verts[ADDR(i+s/2,j+s/2,2)] = z0123;

		mountain(i,j,s/2);
		mountain(i+s/2,j,s/2);
		mountain(i,j+s/2,s/2);
		mountain(i+s/2,j+s/2,s/2);

	} else {

		float dx,dy,dz;

		if (i == 0) {
			dx = verts[ADDR(i+1,j,2)] - verts[ADDR(i,j,2)];
		} else if (i == res-1) {
			dx = verts[ADDR(i,j,2)] - verts[ADDR(i-1,j,2)];
		} else {
			dx = (verts[ADDR(i+1,j,2)] - verts[ADDR(i-1,j,2)])/2.0;
		}

		if (j == 0) {
			dy = verts[ADDR(i,j+1,2)] - verts[ADDR(i,j,2)];
		} else if (j == res-1) {
			dy = verts[ADDR(i,j,2)] - verts[ADDR(i,j-1,2)];
		} else {
			dy = (verts[ADDR(i,j+1,2)] - verts[ADDR(i,j-1,2)])/2.0;
		}

		dx *= res;
		dy *= res;
		dz = 1.0/sqrt(dx*dx + dy*dy + 1.0);
		dx *= dz;
		dy *= dz;

		norms[ADDR(i,j,0)] = dx;
		norms[ADDR(i,j,1)] = dy;
		norms[ADDR(i,j,2)] = dz;
	}
}
コード例 #7
0
ファイル: Mountain.cpp プロジェクト: novaintel/csci3161
void landgen(void)
{
	int level = 5, i;
	static int arraySize = pow(2.0, MAXLEVEL + 1);
	if (landGenFirst)
	{
		ptptr = 0;
		landGenFirst = 0;
		landpt = new Vector3[arraySize];
		srand(time(NULL));
		ptptr = 0;

		mountain(MAXLEVEL - 1, 0.0, 0.0, INITHEIGHT, LANDW, LANDL, 0.0);
		mountain(MAXLEVEL - 1, 0.0, 0.0, INITHEIGHT, 0.0, LANDL, 0.0);
		mountain(MAXLEVEL - 1, 0.0, 0.0, INITHEIGHT, -1. * LANDW, LANDL, 0.0);
		mountain(MAXLEVEL - 1, 0.0, 0.0, INITHEIGHT, -1. * LANDW, 0.0, 0.0);
		mountain(MAXLEVEL - 1, 0.0, 0.0, INITHEIGHT, -1. * LANDW, -1. * LANDL, 0.0);
		mountain(MAXLEVEL - 1, 0.0, 0.0, INITHEIGHT, 0.0, -1. * LANDL, 0.0);
		mountain(MAXLEVEL - 1, 0.0, 0.0, INITHEIGHT, LANDW, -1. * LANDL, 0.0);
		mountain(MAXLEVEL - 1, 0.0, 0.0, INITHEIGHT, LANDW, 0.0, 0.0);

		sortIt(arraySize);
	}

	for (i = 0; i<arraySize / 8 * 7; i++)
	{
		if ((i + 1) % (arraySize / 8) == 0) continue;

		glBegin(GL_TRIANGLE_STRIP);

		glVertex3f(landpt[i].x, landpt[i].y, landpt[i].z);
		glVertex3f(landpt[i + arraySize / 8].x, landpt[i + arraySize / 8].y, landpt[i + arraySize / 8].z);
		glVertex3f(landpt[i + 1].x, landpt[i + 1].y, landpt[i + 1].z);
		glVertex3f(landpt[i + arraySize / 8 + 1].x, landpt[i + arraySize / 8 + 1].y, landpt[i + arraySize / 8 + 1].z);

		glEnd();
	}

	for (i = arraySize / 8 * 7; i<arraySize - 1; i++)
	{
		glBegin(GL_TRIANGLE_STRIP);

		glVertex3f(landpt[i].x, landpt[i].y, landpt[i].z);
		glVertex3f(landpt[i - arraySize / 8 * 7].x, landpt[i - arraySize / 8 * 7].y, landpt[i - arraySize / 8 * 7].z);
		glVertex3f(landpt[i + 1].x, landpt[i + 1].y, landpt[i + 1].z);
		glVertex3f(landpt[i - arraySize / 8 * 7 + 1].x, landpt[i - arraySize / 8 * 7 + 1].y, landpt[i - arraySize / 8 * 7 + 1].z);

		glEnd();
	}

	glBegin(GL_TRIANGLE_FAN);

	glVertex3f(0.0, 0.0, INITHEIGHT);
	glVertex3f(landpt[0].x, landpt[0].y, landpt[0].z);
	glVertex3f(landpt[arraySize / 8].x, landpt[arraySize / 8].y, landpt[arraySize / 8].z);
	glVertex3f(landpt[arraySize / 4].x, landpt[arraySize / 4].y, landpt[arraySize / 4].z);
	glVertex3f(landpt[arraySize / 8 * 3].x, landpt[arraySize / 8 * 3].y, landpt[arraySize / 8 * 3].z);
	glVertex3f(landpt[arraySize / 2].x, landpt[arraySize / 2].y, landpt[arraySize / 2].z);
	glVertex3f(landpt[arraySize / 8 * 5].x, landpt[arraySize / 8 * 5].y, landpt[arraySize / 8 * 5].z);
	glVertex3f(landpt[arraySize / 4 * 3].x, landpt[arraySize / 4 * 3].y, landpt[arraySize / 4 * 3].z);
	glVertex3f(landpt[arraySize / 8 * 7].x, landpt[arraySize / 8 * 7].y, landpt[arraySize / 8 * 7].z);
	glVertex3f(landpt[0].x, landpt[0].y, landpt[0].z);

	glEnd();
}
コード例 #8
0
void display3()
{

glClear(GL_COLOR_BUFFER_BIT);
road();
mountain();

//brown
glBegin(GL_POLYGON);
glColor3f(0.9,0.3,0.0);
	glVertex2i(-10,300);
	glVertex2i(645,310);
   	glVertex2i(940,100);
	glVertex2i(-10,100);
glEnd();

building();
glPushMatrix();
glTranslated(e,300.0,0.0);
glColor3f(1.0,1.0,1.0);
glBegin(GL_POLYGON);
glVertex2f(0.0,30.0);
glVertex2f(0.0,55.0);
glVertex2f(135.0,55.0);
glVertex2f(135.0,30.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(e,300.0,0.0);
glColor3f(1.0,1.0,1.0);
glBegin(GL_POLYGON);
glVertex2f(135.0,55.0);
glVertex2f(150.0,50.0);
glVertex2f(155.0,45.0);
glVertex2f(160.0,40.0);
glVertex2f(135.0,40.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(e,300.0,0.0);
glColor3f(0.0,0.0,0.0);
glBegin(GL_LINE_LOOP);
glVertex2f(135.0,55.0);
glVertex2f(150.0,50.0);
glVertex2f(155.0,45.0);
glVertex2f(160.0,40.0);
glVertex2f(135.0,40.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(e,300.0,0.0);
glColor3f(1.0,0.0,0.0);
glBegin(GL_POLYGON);
glVertex2f(135.0,40.0);
glVertex2f(160.0,40.0);
glVertex2f(160.0,37.0);
glVertex2f(145.0,30.0);
glVertex2f(135.0,30.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(e,300.0,0.0);
glColor3f(1.0,0.0,0.0);
glBegin(GL_POLYGON);
glVertex2f(0.0,55.0);
glVertex2f(0.0,80.0);
glVertex2f(10.0,80.0);
glVertex2f(40.0,55.0);
//glVertex2f(165.0,40.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(e,300.0,0.0);
glColor3f(1.0,0.0,0.0);
glBegin(GL_POLYGON);
glVertex2f(65.0,55.0);
glVertex2f(50.0,70.0);
glVertex2f(75.0,70.0);
glVertex2f(90.0,55.0);
//glVertex2f(165.0,40.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(e,300.0,0.0);
glColor3f(1.0,0.0,0.0);
glBegin(GL_POLYGON);
glVertex2f(70.0,40.0);
glVertex2f(100.0,40.0);
glVertex2f(80.0,15.0);
glVertex2f(50.0,15.0);

glEnd();

glPopMatrix();
glutSwapBuffers();
}
コード例 #9
0
void display2()
{

glClear(GL_COLOR_BUFFER_BIT);

mountain();


//green
glBegin(GL_POLYGON);
glColor3f(0.0,1.0,0.0);
	glVertex2i(-10,300);
	glVertex2i(645,310);
   	glVertex2i(940,0);
	glVertex2i(-10,0);
glEnd();

trees();

glPushMatrix();
glTranslated(d,300.0,0.0);
glColor3f(1.0,1.0,1.0);
glBegin(GL_POLYGON);
glVertex2f(0.0,30.0);
glVertex2f(0.0,55.0);
glVertex2f(135.0,55.0);
glVertex2f(135.0,30.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(d,300.0,0.0);
glColor3f(1.0,1.0,1.0);
glBegin(GL_POLYGON);
glVertex2f(135.0,55.0);
glVertex2f(150.0,50.0);
glVertex2f(155.0,45.0);
glVertex2f(160.0,40.0);
glVertex2f(135.0,40.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(d,300.0,0.0);
glColor3f(0.0,0.0,0.0);
glBegin(GL_LINE_LOOP);
glVertex2f(135.0,55.0);
glVertex2f(150.0,50.0);
glVertex2f(155.0,45.0);
glVertex2f(160.0,40.0);
glVertex2f(135.0,40.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(d,300.0,0.0);
glColor3f(1.0,0.0,0.0);
glBegin(GL_POLYGON);
glVertex2f(135.0,40.0);
glVertex2f(160.0,40.0);
glVertex2f(160.0,37.0);
glVertex2f(145.0,30.0);
glVertex2f(135.0,30.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(d,300.0,0.0);
glColor3f(1.0,0.0,0.0);
glBegin(GL_POLYGON);
glVertex2f(0.0,55.0);
glVertex2f(0.0,80.0);
glVertex2f(10.0,80.0);
glVertex2f(40.0,55.0);
//glVertex2f(165.0,40.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(d,300.0,0.0);
glColor3f(1.0,0.0,0.0);
glBegin(GL_POLYGON);
glVertex2f(65.0,55.0);
glVertex2f(50.0,70.0);
glVertex2f(75.0,70.0);
glVertex2f(90.0,55.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(d,300.0,0.0);
glColor3f(1.0,0.0,0.0);
glBegin(GL_POLYGON);
glVertex2f(70.0,40.0);
glVertex2f(100.0,40.0);
glVertex2f(80.0,15.0);
glVertex2f(50.0,15.0);

glEnd();
glPopMatrix();


}
コード例 #10
0
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
if(flag==0)
{

	glRasterPos3f(58,58,0);
for(i=0;s[i]!='\0';i++) 
glutBitmapCharacter( GLUT_BITMAP_TIMES_ROMAN_24,s[i]);
glRasterPos3f(45,450,0);
for(i=0;s1[i]!='\0';i++) 
glutBitmapCharacter( GLUT_BITMAP_TIMES_ROMAN_24,s1[i]);
glRasterPos3f(90,358,0);
for(i=0;s2[i]!='\0';i++) 
glutBitmapCharacter( GLUT_BITMAP_TIMES_ROMAN_24,s2[i]);
glRasterPos3f(70,338,0);
for(i=0;s3[i]!='\0';i++) 
glutBitmapCharacter( GLUT_BITMAP_TIMES_ROMAN_24,s3[i]);
glRasterPos3f(218,218,0);
for(i=0;s4[i]!='\0';i++) 
glutBitmapCharacter( GLUT_BITMAP_TIMES_ROMAN_24,s4[i]);
glRasterPos3f(350,218,0);
for(i=0;s5[i]!='\0';i++) 
glutBitmapCharacter( GLUT_BITMAP_TIMES_ROMAN_24,s5[i]);
glRasterPos3f(250,150,0);
for(i=0;s6[i]!='\0';i++) 
glutBitmapCharacter( GLUT_BITMAP_TIMES_ROMAN_24,s6[i]);
glColor3f(1.0,1.0,0.0);
glRasterPos3f(250,130,0);
for(i=0;s7[i]!='\0';i++) 
glutBitmapCharacter( GLUT_BITMAP_TIMES_ROMAN_24,s7[i]);
glRasterPos3f(250,100,0);
for(i=0;s8[i]!='\0';i++) 
glutBitmapCharacter( GLUT_BITMAP_TIMES_ROMAN_24,s8[i]);
glRasterPos3f(58,28,0);
for(i=0;s9[i]!='\0';i++) 
glutBitmapCharacter( GLUT_BITMAP_TIMES_ROMAN_24,s9[i]);




}
else
{

	road();
mountain();


	
//green
glBegin(GL_POLYGON);
glColor3f(0.0,1.0,0.0);
	glVertex2i(-10,300);
	glVertex2i(645,310);
   	glVertex2i(940,100);
	glVertex2i(-10,100);
glEnd();


trees();


//plane construction

glPushMatrix();
glTranslated(a,c,0.0);
glColor3f(1,1,1);
glBegin(GL_POLYGON);//rectangular body
glVertex2f(0.0,30.0);
glVertex2f(0.0,55.0);
glVertex2f(135.0,55.0);
glVertex2f(135.0,30.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(a,c,0.0);
glColor3f(1.0,1.0,1.0);
glBegin(GL_POLYGON);//upper triangle construction plane
glVertex2f(135.0,55.0);
glVertex2f(150.0,50.0);
glVertex2f(155.0,45.0);
glVertex2f(160.0,40.0);
glVertex2f(135.0,40.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(a,c,0.0);
glColor3f(0.0,0.0,0.0);
glBegin(GL_LINE_LOOP);//outline of upper triangle plane
glVertex2f(135.0,55.0);
glVertex2f(150.0,50.0);
glVertex2f(155.0,45.0);
glVertex2f(160.0,40.0);
glVertex2f(135.0,40.0);
glEnd();
glPopMatrix();


glPushMatrix();
glTranslated(a,c,0.0);
glColor3f(1.0,0.0,0.0);
glBegin(GL_POLYGON);//lower triangle
glVertex2f(135.0,40.0);
glVertex2f(160.0,40.0);
glVertex2f(160.0,37.0);
glVertex2f(145.0,30.0);
glVertex2f(135.0,30.0);
glEnd();
glPopMatrix();


glPushMatrix();
glTranslated(a,c,0.0);
glColor3f(1.0,0.0,0.0);
glBegin(GL_POLYGON);//back wing 
glVertex2f(0.0,55.0);
glVertex2f(0.0,80.0);
glVertex2f(10.0,80.0);
glVertex2f(40.0,55.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(a,c,0.0);
glColor3f(1.0,0.0,0.0);
glBegin(GL_POLYGON);//left side wing
glVertex2f(65.0,55.0);
glVertex2f(50.0,70.0);
glVertex2f(75.0,70.0);
glVertex2f(90.0,55.0);
glEnd();
glPopMatrix();

glPushMatrix();
glTranslated(a,c,0.0);
glColor3f(1.0,0.0,0.0);
glBegin(GL_POLYGON);//rightside wing
glVertex2f(70.0,40.0);
glVertex2f(100.0,40.0);
glVertex2f(80.0,15.0);
glVertex2f(50.0,15.0);

glEnd();

glPopMatrix();



	if(c>390)    //timer to jump to next display
{
	display2();
	d+=5;//plane takeoff on x in 2nd display
}

if(a>500.0)//window position during take off
{
	a=0.0;
	b=0.0;
}

if(c>800)//timer to jump to 3rd display
{
	display3();
	e+=5;//plane takeoff on x in 3rd display
	
	if(e>250)//timer to call blast function
	{
		blast();
		e=250;
	}
}

}

glFlush();
glutSwapBuffers();
}
コード例 #11
0
ファイル: mountain.cpp プロジェクト: anneomcl/FlightCamera
void mountain(float x0, float y0, float z0, float x1, float y1, float z1, float x2, float y2, float z2, float s)
{
	float x01, y01, z01, x12, y12, z12, x20, y20, z20;

	if (s < polysize) {
		x01 = x1 - x0;
		y01 = y1 - y0;
		z01 = z1 - z0;

		x12 = x2 - x1;
		y12 = y2 - y1;
		z12 = z2 - z1;

		x20 = x0 - x2;
		y20 = y0 - y2;
		z20 = z0 - z2;

		float nx = y01*(-z20) - (-y20)*z01;
		float ny = z01*(-x20) - (-z20)*x01;
		float nz = x01*(-y20) - (-x20)*y01;

		float den = sqrt(nx*nx + ny*ny + nz*nz);

		if (den > 0.0) {
			nx /= den;
			ny /= den;
			nz /= den;
		}

		glNormal3f(nx, ny, nz);
		glBegin(GL_TRIANGLES);
		glVertex3f(x0, y0, z0);
		glVertex3f(x1, y1, z1);
		glVertex3f(x2, y2, z2);
		glEnd();

		return;
	}

	x01 = 0.5*(x0 + x1);
	y01 = 0.5*(y0 + y1);
	z01 = 0.5*(z0 + z1);

	x12 = 0.5*(x1 + x2);
	y12 = 0.5*(y1 + y2);
	z12 = 0.5*(z1 + z2);

	x20 = 0.5*(x2 + x0);
	y20 = 0.5*(y2 + y0);
	z20 = 0.5*(z2 + z0);

	s *= 0.5;

	srand(seed(x01, y01));
	z01 += 0.3*s*(2.0*((float)rand() / (float)RAND_MAX) - 1.0);
	srand(seed(x12, y12));
	z12 += 0.3*s*(2.0*((float)rand() / (float)RAND_MAX) - 1.0);
	srand(seed(x20, y20));
	z20 += 0.3*s*(2.0*((float)rand() / (float)RAND_MAX) - 1.0);

	mountain(x0, y0, z0, x01, y01, z01, x20, y20, z20, s);
	mountain(x1, y1, z1, x12, y12, z12, x01, y01, z01, s);
	mountain(x2, y2, z2, x20, y20, z20, x12, y12, z12, s);
	mountain(x01, y01, z01, x12, y12, z12, x20, y20, z20, s);
}
コード例 #12
0
ファイル: mountain.cpp プロジェクト: anneomcl/FlightCamera
void display(void)
{
	static GLfloat angle = 0.0;
	static GLfloat theta = 0.0;
	static GLfloat thetaP = 0.0;

	GLfloat tanamb[] = { 0.2, 0.15, 0.1, 1.0 };
	GLfloat tandiff[] = { 0.4, 0.3, 0.2, 1.0 };

	GLfloat seaamb[] = { 0.0, 0.0, 0.2, 1.0 };
	GLfloat seadiff[] = { 0.0, 0.0, 0.8, 1.0 };
	GLfloat seaspec[] = { 0.5, 0.5, 1.0, 1.0 };


	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glColor3f(1.0, 1.0, 1.0);
	glLoadIdentity();             /* clear the matrix */
	/* viewing transformation  */
	
	if (rotateLeft)
	{
		angle += 1;
	}

	else if (rotateRight)
	{
		angle -= 1;
	}
	else if (rotateUp)
	{
		centerZ += 0.01;
	}

	else if (rotateDown)
	{
		centerZ -= 0.01;
	}

	gluLookAt(eyePosX, eyePosY, eyePosZ, centerX, centerY, centerZ, upX, upY, upZ);

	glRotatef(angle, xAxis, yAxis, zAxis);

	glTranslatef(translateX, translateY, translateZ);      /* modeling transformation */


	glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, tanamb);
	glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, tandiff);
	glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, tandiff);
	glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 10.0);

	mountain(0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0);
	mountain(1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0);

	glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, seaamb);
	glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, seadiff);
	glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, seaspec);
	glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 10.0);

	glNormal3f(0.0, 0.0, 1.0);
	glBegin(GL_QUADS);
	glVertex3f(0.0, 0.0, sealevel);
	glVertex3f(1.0, 0.0, sealevel);
	glVertex3f(1.0, 1.0, sealevel);
	glVertex3f(0.0, 1.0, sealevel);
	glEnd();

	glutSwapBuffers();
	glFlush();

	glutPostRedisplay();
}