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); } }
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++; } }
int main() { int n; scanf("%d", &n); mountain(n); return 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); } }
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; } } }
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; } }
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(); }
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(); }
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(); }
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(); }
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); }
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(); }