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
|