week8
problem 1

int meshW = 30;
int meshH = 30;
Vec3d mesh[30][30];
Vec3d mesh2[30][30];
void drawProblem1(){
glPushMatrix();
glRotatef(50,1,0,0);
//glRotatef(mouseY,0,0,1);
//glBegin(GL_POINTS);
//glColor3f(1,1,1);
for(int i=0;i<meshW;i++){
for(int j=0;j<meshH;j++){
mesh[i][j]=Vec3d(-200+i*20,-200+j*20,0);
}
}
//glBegin(GL_LINE_STRIP);
glBegin(GL_LINES);
glColor3f(1,1,1);
for(int i=0;i<meshW-1;i++){
for(int j=0;j<meshH-1;j++){
glVertex3f(mesh[i][j].x,mesh[i][j].y,mesh[i][j].z);
glVertex3f(mesh[i+1][j].x,mesh[i+1][j].y,mesh[i+1][j].z);
glVertex3f(mesh[i][j].x,mesh[i][j].y,mesh[i][j].z);
glVertex3f(mesh[i][j+1].x,mesh[i][j+1].y,mesh[i][j+1].z);
glVertex3f(mesh[i][j].x,mesh[i][j].y,mesh[i][j].z);
glVertex3f(mesh[i+1][j+1].x,mesh[i+1][j+1].y,mesh[i+1][j+1].z);
glVertex3f(mesh[i+1][j+1].x,mesh[i+1][j+1].y,mesh[i+1][j+1].z);
glVertex3f(mesh[i+1][j].x,mesh[i+1][j].y,mesh[i+1][j].z);
glVertex3f(mesh[i+1][j+1].x,mesh[i+1][j+1].y,mesh[i+1][j+1].z);
glVertex3f(mesh[i][j+1].x,mesh[i][j+1].y,mesh[i][j+1].z);
}
}
glEnd();
glPopMatrix();
//count1 = count1 +0.04;
//count1=mouseY;
}
problem 2

float off2;
void drawProblem2(){
glPushMatrix();
glRotatef(130,1,0,0);
//glTranslate(100,0,0);
off2+=0.001;
for(int i=0;i<meshW;i++){
for(int j=0;j<meshH;j++){
mesh[i][j]=Vec3d(-200+i*20,-200+j*20,50*sin(i+off2));
}
}
glBegin(GL_TRIANGLES);
glColor3f(1,1,1);
for(int i=0;i<meshW-1;i++){
for(int j=0;j<meshH-1;j++){
Vec3d a = mesh[i][j];
Vec3d b= mesh[i+1][j];
Vec3d c = mesh[i+1][j+1];
Vec3d d = mesh[i][j+1];
float shading1;
float shading2;
Vec3d ab = b-a;
Vec3d ac = c-a;
Vec3d ad = d-a;
Vec3d n1=ac.cross(ab);
Vec3d n2=ad.cross(ac);
Vec3d light(mouseX,mouseY,-300);
light.normalize();
n1.normalize();
n2.normalize();
//n1 = n1/(ab.length()*ac.length());
//n2 = n2/(ac.length()*ad.length());
//shading1 = n1.dot(light);
shading1 = light.dot(n1);
//shading2 = n2.dot(light);
shading2 = light.dot(n2);
if(shading1<0) shading1= 0;
if(shading2<0) shading2= 0;
glColor4f(shading1,shading1,shading1,0.5);
glVertex3f(a.x,a.y,a.z);
glVertex3f(b.x,b.y,b.z);
glVertex3f(c.x,c.y,c.z);
glColor4f(shading2,shading2,shading2,0.5);
glVertex3f(a.x,a.y,a.z);
glVertex3f(c.x,c.y,c.z);
glVertex3f(d.x,d.y,d.z);
}
}
glEnd();
glPopMatrix();
}
problem 3

void drawProblem3(){
glPushMatrix();
glRotatef(130,1,0,0);
for(int i=0;i<meshW;i++){
for(int j=0;j<meshH;j++){
mesh[i][j]=Vec3d(-200+i*20,-200+j*20,-300/(sqrt((mouseX-i*20)*(mouseX-i*20) + (mouseY-j*20)*(mouseY-j*20))/100+1));
}
}
glBegin(GL_TRIANGLES);
glColor3f(1,1,1);
for(int i=0;i<meshW-1;i++){
for(int j=0;j<meshH-1;j++){
Vec3d a = mesh[i][j];
Vec3d b= mesh[i+1][j];
Vec3d c = mesh[i+1][j+1];
Vec3d d = mesh[i][j+1];
float shading1;
float shading2;
Vec3d ab = b-a;
Vec3d ac = c-a;
Vec3d ad = d-a;
Vec3d n1=ac.cross(ab);
Vec3d n2=ad.cross(ac);
//Vec3d light(mouseX,mouseY,-300);
Vec3d light(0,400,-300);
light.normalize();
n1.normalize();
n2.normalize();
//n1 = n1/(ab.length()*ac.length());
//n2 = n2/(ac.length()*ad.length());
//shading1 = n1.dot(light);
shading1 = light.dot(n1);
//shading2 = n2.dot(light);
shading2 = light.dot(n2);
if(shading1<0) shading1= 0;
if(shading2<0) shading2= 0;
glColor4f(shading1,shading1,shading1,0.5);
glVertex3f(a.x,a.y,a.z);
glVertex3f(b.x,b.y,b.z);
glVertex3f(c.x,c.y,c.z);
glColor4f(shading2,shading2,shading2,0.5);
glVertex3f(a.x,a.y,a.z);
glVertex3f(c.x,c.y,c.z);
glVertex3f(d.x,d.y,d.z);
}
}
glEnd();
glPopMatrix();
//glBegin(GL_TRIANGLES);
/*
glBegin(GL_LINES);
glColor4f(1,1,1,.7);
for(int i=0;i<meshW-1;i++){
for(int j=0;j<meshH-1;j++){
Vec3d a(mesh[i][j].x,mesh[i][j].y,mesh[i][j].z);
Vec3d b(mesh[i+1][j+1].x,mesh[i+1][j+1].y,mesh[i+1][j+1].z);
Vec3d c(mesh[i][j+1].x,mesh[i][j+1].y,mesh[i][j+1].z);
Vec3d d(mesh[i+1][j].x,mesh[i+1][j].y,mesh[i+1][j].z);
glVertex3f(mesh[i][j].x,mesh[i][j].y,mesh[i][j].z);
glVertex3f(mesh[i+1][j].x,mesh[i+1][j].y,mesh[i+1][j].z);
glVertex3f(mesh[i][j].x,mesh[i][j].y,mesh[i][j].z);
glVertex3f(mesh[i][j+1].x,mesh[i][j+1].y,mesh[i][j+1].z);
glVertex3f(mesh[i][j].x,mesh[i][j].y,mesh[i][j].z);
glVertex3f(mesh[i+1][j+1].x,mesh[i+1][j+1].y,mesh[i+1][j+1].z);
glVertex3f(mesh[i+1][j+1].x,mesh[i+1][j+1].y,mesh[i+1][j+1].z);
glVertex3f(mesh[i+1][j].x,mesh[i+1][j].y,mesh[i+1][j].z);
glVertex3f(mesh[i+1][j+1].x,mesh[i+1][j+1].y,mesh[i+1][j+1].z);
glVertex3f(mesh[i][j+1].x,mesh[i][j+1].y,mesh[i][j+1].z);
}
}
glEnd();
glPopMatrix();
*/
}
problem 4

float timeX;
void drawProblem4(){
glPushMatrix();
glRotatef(130,1,0,0);
timeX+=0.001;
for(int i=0;i<meshW;i++){
for(int j=0;j<meshH;j++){
mesh[i][j]=Vec3d(-200+i*20,-200+j*20,100*sin(i+timeX));
}
}
glBegin(GL_TRIANGLES);
glColor3f(1,1,1);
for(int i=0;i<meshW-1;i++){
for(int j=0;j<meshH-1;j++){
Vec3d a = mesh[i][j];
Vec3d b= mesh[i+1][j];
Vec3d c = mesh[i+1][j+1];
Vec3d d = mesh[i][j+1];
float shading1;
float shading2;
Vec3d ab = b-a;
Vec3d ac = c-a;
Vec3d ad = d-a;
Vec3d n1=ac.cross(ab);
Vec3d n2=ad.cross(ac);
//Vec3d light(mouseX,mouseY,-300);
Vec3d light(0,400,-300);
light.normalize();
n1.normalize();
n2.normalize();
//n1 = n1/(ab.length()*ac.length());
//n2 = n2/(ac.length()*ad.length());
//shading1 = n1.dot(light);
shading1 = light.dot(n1);
//shading2 = n2.dot(light);
shading2 = light.dot(n2);
if(shading1<0) shading1= 0;
if(shading2<0) shading2= 0;
glColor4f(shading1,shading1,shading1,0.5);
glVertex3f(a.x,a.y,a.z);
glVertex3f(b.x,b.y,b.z);
glVertex3f(c.x,c.y,c.z);
glColor4f(shading2,shading2,shading2,0.5);
glVertex3f(a.x,a.y,a.z);
glVertex3f(c.x,c.y,c.z);
glVertex3f(d.x,d.y,d.z);
}
}
glEnd();
glPopMatrix();
}
problem 5

float timeY;
void drawProblem5(){
glPushMatrix();
glRotatef(130,1,0,0);
timeX+=0.001;
timeY+=0.0014;
for(int i=0;i<meshW;i++){
for(int j=0;j<meshH;j++){
mesh[i][j]=Vec3d(-200+i*20,-200+j*20,60*sin(i+timeX)*sin(j+timeY));
}
}
glBegin(GL_TRIANGLES);
glColor3f(1,1,1);
for(int i=0;i<meshW-1;i++){
for(int j=0;j<meshH-1;j++){
Vec3d a = mesh[i][j];
Vec3d b= mesh[i+1][j];
Vec3d c = mesh[i+1][j+1];
Vec3d d = mesh[i][j+1];
float shading1;
float shading2;
Vec3d ab = b-a;
Vec3d ac = c-a;
Vec3d ad = d-a;
Vec3d n1=ac.cross(ab);
Vec3d n2=ad.cross(ac);
//Vec3d light(mouseX,mouseY,-300);
Vec3d light(0,400,-300);
light.normalize();
n1.normalize();
n2.normalize();
//n1 = n1/(ab.length()*ac.length());
//n2 = n2/(ac.length()*ad.length());
//shading1 = n1.dot(light);
shading1 = light.dot(n1);
//shading2 = n2.dot(light);
shading2 = light.dot(n2);
if(shading1<0) shading1= 0;
if(shading2<0) shading2= 0;
glColor4f(shading1,shading1,shading1,0.5);
glVertex3f(a.x,a.y,a.z);
glVertex3f(b.x,b.y,b.z);
glVertex3f(c.x,c.y,c.z);
glColor4f(shading2,shading2,shading2,0.5);
glVertex3f(a.x,a.y,a.z);
glVertex3f(c.x,c.y,c.z);
glVertex3f(d.x,d.y,d.z);
}
}
glEnd();
glPopMatrix();
}
problem 6

void drawProblem6(){
glPushMatrix();
glRotatef(130,1,0,0);
timeX+=0.001;
timeY+=0.0014;
float w=(float)mouseX/(float)windowW;
//glBegin(GL_TRIANGLES);
glBegin(GL_LINES);
glColor4f(1,1,1,.15);
for(int i=0;i<meshW-1;i++){
for(int j=0;j<meshH-1;j++){
Vec3d a(mesh[i][j].x,mesh[i][j].y,mesh[i][j].z);
Vec3d b(mesh[i+1][j+1].x,mesh[i+1][j+1].y,mesh[i+1][j+1].z);
Vec3d c(mesh[i][j+1].x,mesh[i][j+1].y,mesh[i][j+1].z);
Vec3d d(mesh[i+1][j].x,mesh[i+1][j].y,mesh[i+1][j].z);
glVertex3f(mesh[i][j].x,mesh[i][j].y,mesh[i][j].z);
glVertex3f(mesh[i+1][j].x,mesh[i+1][j].y,mesh[i+1][j].z);
glVertex3f(mesh[i][j].x,mesh[i][j].y,mesh[i][j].z);
glVertex3f(mesh[i][j+1].x,mesh[i][j+1].y,mesh[i][j+1].z);
glVertex3f(mesh[i][j].x,mesh[i][j].y,mesh[i][j].z);
glVertex3f(mesh[i+1][j+1].x,mesh[i+1][j+1].y,mesh[i+1][j+1].z);
glVertex3f(mesh[i+1][j+1].x,mesh[i+1][j+1].y,mesh[i+1][j+1].z);
glVertex3f(mesh[i+1][j].x,mesh[i+1][j].y,mesh[i+1][j].z);
glVertex3f(mesh[i+1][j+1].x,mesh[i+1][j+1].y,mesh[i+1][j+1].z);
glVertex3f(mesh[i][j+1].x,mesh[i][j+1].y,mesh[i][j+1].z);
}
}
glEnd();
//glPopMatrix();
for(int i=0;i<meshW;i++){
for(int j=0;j<meshH;j++){
//mesh2[i][j] = mesh[i][j];
Vec3d v1(mesh[i][j]);
Vec3d v2(mesh[i-1][j]);
Vec3d v3(mesh[i-1][j-1]);
Vec3d v4(mesh[i][j-1]);
Vec3d v5(mesh[i+1][j-1]);
Vec3d v6(mesh[i+1][j]);
Vec3d v7(mesh[i+1][j+1]);
Vec3d v8(mesh[i][j+1]);
Vec3d v9(mesh[i-1][j+1]);
//v1.x=w*v1.x+(1-w)/8*v2.x+(1-w)/8*v3.x+(1-w)/8*v4.x+(1-w)/8*v5.x+(1-w)/8*v6.x+(1-w)/8*v7.x+(1-w)/8*v8.x+(1-w)/8*v9.x;
//v1.y=w*v1.y+(1-w)/8*v2.y+(1-w)/8*v3.y+(1-w)/8*v4.y+(1-w)/8*v5.y+(1-w)/8*v6.y+(1-w)/8*v7.y+(1-w)/8*v8.y+(1-w)/8*v9.y;
v1.z=w*v1.z+(1-w)/8*v2.z+(1-w)/8*v3.z+(1-w)/8*v4.z+(1-w)/8*v5.z+(1-w)/8*v6.z+(1-w)/8*v7.z+(1-w)/8*v8.z+(1-w)/8*v9.z-150;
//v1.z=350;
mesh2[i][j]=v1;
}
}
glBegin(GL_TRIANGLES);
glColor3f(1,1,1);
for(int i=0;i<meshW-1;i++){
for(int j=0;j<meshH-1;j++){
Vec3d a = mesh2[i][j];
Vec3d b= mesh2[i+1][j];
Vec3d c = mesh2[i+1][j+1];
Vec3d d = mesh2[i][j+1];
float shading1;
float shading2;
Vec3d ab = b-a;
Vec3d ac = c-a;
Vec3d ad = d-a;
Vec3d n1=ac.cross(ab);
Vec3d n2=ad.cross(ac);
//Vec3d light(mouseX,mouseY,-300);
Vec3d light(400,400,-300);
light.normalize();
n1.normalize();
n2.normalize();
//n1 = n1/(ab.length()*ac.length());
//n2 = n2/(ac.length()*ad.length());
//shading1 = n1.dot(light);
shading1 = light.dot(n1);
//shading2 = n2.dot(light);
shading2 = light.dot(n2);
if(shading1<0) shading1= 0;
if(shading2<0) shading2= 0;
glColor4f(shading1,shading1,shading1,0.5);
glVertex3f(a.x,a.y,a.z);
glVertex3f(b.x,b.y,b.z);
glVertex3f(c.x,c.y,c.z);
glColor4f(shading2,shading2,shading2,0.5);
glVertex3f(a.x,a.y,a.z);
glVertex3f(c.x,c.y,c.z);
glVertex3f(d.x,d.y,d.z);
}
}
glEnd();
glPopMatrix();
/*
glBegin(GL_LINES);
glColor4f(1,0,0,.9);
for(int i=1;i<meshW-1;i++){
for(int j=1;j<meshH-1;j++){
Vec3d a(mesh2[i][j].x,mesh2[i][j].y,mesh2[i][j].z);
Vec3d b(mesh2[i+1][j+1].x,mesh2[i+1][j+1].y,mesh2[i+1][j+1].z);
Vec3d c(mesh2[i][j+1].x,mesh2[i][j+1].y,mesh2[i][j+1].z);
Vec3d d(mesh2[i+1][j].x,mesh2[i+1][j].y,mesh2[i+1][j].z);
glVertex3f(mesh2[i][j].x,mesh2[i][j].y,mesh2[i][j].z);
glVertex3f(mesh2[i+1][j].x,mesh2[i+1][j].y,mesh2[i+1][j].z);
glVertex3f(mesh2[i][j].x,mesh2[i][j].y,mesh2[i][j].z);
glVertex3f(mesh2[i][j+1].x,mesh2[i][j+1].y,mesh2[i][j+1].z);
glVertex3f(mesh2[i][j].x,mesh2[i][j].y,mesh2[i][j].z);
glVertex3f(mesh2[i+1][j+1].x,mesh2[i+1][j+1].y,mesh2[i+1][j+1].z);
glVertex3f(mesh2[i+1][j+1].x,mesh2[i+1][j+1].y,mesh2[i+1][j+1].z);
glVertex3f(mesh2[i+1][j].x,mesh2[i+1][j].y,mesh2[i+1][j].z);
glVertex3f(mesh2[i+1][j+1].x,mesh2[i+1][j+1].y,mesh2[i+1][j+1].z);
glVertex3f(mesh2[i][j+1].x,mesh2[i][j+1].y,mesh2[i][j+1].z);
}
}
glEnd();
glPopMatrix();
*/
}