Week 1 Assignment

Yasmin Elayat

 

Problem 1. Write a comment for every line in the main.cpp file.

code  

 

Problem 2. A Portrait.

a. Make a function called drawPortrait that is called from displayFunc. Draw the shape of your head in profile. Use GL_TRIANGLE_FAN. The portrait should be as accurate as possible and involve at least 30 points. Carefully place the first point to ensure a proper fill.

float portrait[43][2] = {  {662.5, 400},{662.5, 0},{437.5, 0}, 
		     {412.5, 37.5},{387.5, 87.5},{362.5, 130}, 
		     {337.5, 125},{287.5, 125}, {262.5, 130},
		     {237.5, 130},{212.5,137.5},{200,150},
		     {187.5, 175},{187.5, 200},{162.5, 212.5},
		     {155,220},{150, 225},{155, 237.5},{162.5,250},
		     {145, 262.5},{137.5,275},{137.5, 280},{140, 290},
		     {140, 300},{137.5, 312.5},{112.5, 325},{106, 330},
		     {100, 350},{115, 375},{137.5, 412.5},{150, 437.5},
		     {162.5, 462.5},{162.5,487.5},{162.5, 512.5},
		     {155,537.5},{162.5, 562.5},{170, 590},
		     {175, 612.5},{187.5, 637.5},{212.5, 662.5},
		     {237.5, 687.5},{250, 700},{662.5,700}}; 

  void drawPortrait()
  {     
	 glColor3f( 0,0,0 );	
	 glBegin(GL_TRIANGLE_FAN);
	 for(int i = 0; i < 43; i++) glVertex2f(portrait[i][0], portrait[i][1]);
	 glEnd();
  }
  
  void drawEye()
  {
	float ptX = 200; float ptY = 455;
	float xPos = 0; float yPos = 0;
	int xtoggle=0;
	float xInc = 5; float yIncL = 3.75; 
	float yIncS = 2.5; int midpoint = 7;
	glBegin(GL_TRIANGLE_STRIP );
	glColor3f(1.0,1.0,1.0);
	for( int i = 0; i < 16; i++) {
		xPos += (xtoggle) ? xInc : 0;
			if(xtoggle) {
				yPos -= (i > midpoint)? yIncL : yIncS;
			}
			else yPos += xInc;
		glVertex2f(ptX + xPos, ptY + yPos);
		xtoggle=!xtoggle;
	}   
	xtoggle=!xtoggle; 
	for( int i = 0; i < 15; i++) {
		xPos += (xtoggle) ? xInc : 0;
		if(xtoggle) {
			yPos += (i < midpoint)? yIncL : yIncS;
		}
		else yPos -= xInc;          
		glVertex2f(ptX + xPos, ptY + yPos);
		xtoggle=!xtoggle;
	}
	for( int i = 0; i < 16; i++) {
		xPos -= (xtoggle) ? xInc : 0;
		if(xtoggle) {
			yPos += (i > midpoint)? yIncL : yIncS;
		}
		else yPos -= xInc;
		glVertex2f(ptX + xPos, ptY + yPos);
		xtoggle=!xtoggle;
	}
	xtoggle=!xtoggle;
	for( int i = 0; i < 16; i++) {
	xPos -= (xtoggle) ? xInc : 0;
	if(xtoggle) {
		 yPos -= (i < midpoint)? yIncL : yIncS;
	 }
	 else yPos += xInc;
	 glVertex2f(ptX + xPos, ptY + yPos);
	 xtoggle=!xtoggle;
	 }
	 glEnd();
} //end draw eye 

void drawLetterE(int x, int y)
{
    glBegin( GL_LINE_STRIP ); 
    glVertex2f(x,y+40);
    glVertex2f(x,y+110);
    glVertex2f(x+60,y+110);
    glVertex2f(x+60,y+100);
    glVertex2f(x+10,y+100);
    glVertex2f(x+10,y+80);
    glVertex2f(x+60,y+80);
    glVertex2f(x+60,y+70);
    glVertex2f(x+10,y+70);
    glVertex2f(x+10,y+50);
    glVertex2f(x+60,y+50);
    glVertex2f(x+60,y+40);
    glVertex2f(x,y+40);
    glEnd();
}

void drawLetterY(int x, int y)
{	
    glBegin( GL_LINE_STRIP ); 
    glVertex2f(x+5,y+100);
    glVertex2f(x+10,y+110);
    glVertex2f(x+30,y+90);
    glVertex2f(x+50,y+110);
    glVertex2f(x+55,y+100);
    glVertex2f(x+35,y+80);
    glVertex2f(x+35,y+40);
    glVertex2f(x+25,y+40);
    glVertex2f(x+25,y+80);
    glVertex2f(x+5,y+100);
    glEnd();
}
	  

 

b. Draw the shape of an eye from the front. Use GL_TRIANGLE_STRIP.

void drawLandscape()
{	
    //sky
    glBegin( GL_QUADS ); 
	glColor3f( 1,1,1);
	glVertex2f(0,windowH/2);
	glColor3f( 0.8,0.8,1);
	glVertex2f(0,windowH);
	glVertex2f(windowW,windowH);
	glColor3f( 1,1,1);
    glVertex2f(windowW,windowH/2);
	glEnd(); 
	
	//ground
    glBegin( GL_QUADS ); 
	glColor3f( 0.5,0.7,0.6);
	glVertex2f(0,0);
	glColor3f( 1,1,1);
	glVertex2f(0,windowH/2);
	glVertex2f(windowW,windowH/2);
	glColor3f( 0.4,0.7,0.4);
    glVertex2f(windowW,0);
	glEnd(); 
}

void drawMountains(int posX, int posY)
{
    	float growY = (mouseY < posY) ? 1 : (mouseY/100);
	glBegin(GL_TRIANGLES);
	glColor3f( 0.8,0.5, 0.04 );
	glVertex2f(posX,posY);
	glColor3f( 1,1,1 );
	glVertex2f(posX+=100, posY*growY);
	glColor3f( 0.8,0.5, 0.04 );
	glVertex2f(posX+=100,posY);
	glEnd();
	glBegin(GL_TRIANGLES);
	glColor3f( 0.8,0.5, 0.04 );
	glVertex2f(posX+=50,posY);
	glColor3f( 1,1,1 );
	glVertex2f(posX+=100, posY*growY);
	glColor3f( 0.8,0.5, 0.04 );
	glVertex2f(posX+=100,posY);
	glEnd();
	glBegin(GL_TRIANGLES);
	glColor3f( 0.8,0.5, 0.04 );
	glVertex2f(posX+=50,posY);
	glColor3f( 1,1,1 );
	glVertex2f(posX+=100,posY*growY);
	glColor3f( 0.8,0.5, 0.04 );
	glVertex2f(posX+=100,posY);
	glEnd();
}

void drawCloud() 
{  
    float t = mouseX/windowW; //opacity
    glColor4f( 1,1,1,t );	
    glBegin(GL_TRIANGLE_FAN);
    for(int i = 0; i < 78; i++) glVertex2f( (cloud[i][0]/2), (cloud[i][1]/2) + 200);
    glEnd();
}

void drawRiver()
{
    float ptX = 300; float ptY = 225;
    float xPos = 0; float yPos = 0;
    int ytoggle=0;  float xInc = 150;
    float yIncL = 150;//3.75;  float yIncS = 125;//2.5; 
    int midpoint = 7;
    glBegin(GL_TRIANGLE_STRIP );
    glColor3f(0.4,0.6,0.9);
	for( int i = 0; i < 5; i++) {
           yPos -= (ytoggle) ? 25 : 0;
           if(ytoggle) {
                 xPos -= (i > midpoint)? yIncL : yIncS;
           }
           else xPos += xInc;
           glVertex2f(ptX + xPos * (mouseX/windowW), ptY + yPos);
           ytoggle=!ytoggle;
   }   
   ytoggle=!ytoggle; 
   glColor3f(0.4,0.6,0.9);
   for( int i = 0; i < 5; i++) {
           yPos -= (ytoggle) ? 25 : 0;
           if(ytoggle) {
                    xPos += (i < midpoint)? yIncL : yIncS;
           }
           else xPos -= xInc;          
           glVertex2f(ptX + xPos * (mouseX/windowW), ptY + yPos);
           ytoggle=!ytoggle;
    }
    for( int i = 0; i < 5; i++) {
           yPos -= (ytoggle) ? 25 : 0;
           if(ytoggle) {
                    xPos += (i > midpoint)? yIncL : yIncS;
           }
           else xPos -= xInc;
           glVertex2f(ptX + xPos * (mouseX/windowW), ptY + yPos);
           ytoggle=!ytoggle;
    }
    ytoggle=!ytoggle;
    for( int i = 0; i < 5; i++) {
           yPos -= (ytoggle) ? 25 : 0;
           if(ytoggle) {
                    xPos -= (i < midpoint)? yIncL : yIncS;
           }
           else xPos += xInc;
           glVertex2f(ptX + xPos * (mouseX/windowW), ptY + yPos);
           ytoggle=!ytoggle;
    }
	glEnd();
}
	  

 

c. Draw your initials as stroked lines with a thicknes of 3 pixels. Use GL_LINE_STRIP.

void drawGrid()
{
    glBegin( GL_LINES);
    glColor3f( 0.9,0.9, 0.9 );
    for(int i =0; i < windowH; i+=10 ) { //draw horizontal lines
            glVertex2f(0,i);
            glVertex2f(windowW,i);
    }
    for( int i = 0; i < windowW; i+=10) { //draw vertical lines
            glVertex2f(i,0);
            glVertex2f(i,windowH);
    }
   glEnd();
}

void drawPoints()
{
     glColor3f( 0.25,0.25,0.25); //dark grey
     for(int i = 0; i < height; i+=10) { 
             for(int j = 0; j < width; j+=10) {
                         glBegin( GL_POINTS);
                         glVertex2f(i,j);
                         glEnd();                         
             }
     }
}
	  

by Yasmin Elayat