//*************************************************************
void drawShadedTriangle(Vec3d A, Vec3d B, Vec3d C){
newMouseX= mouseX-windowW/2;
newMouseY= mouseY-windowH/2;
Vec3d AB= B-A;
Vec3d AC= C-A;
Vec3d Normal= AB.cross(AC);
Normal= Normal/Normal.getLength();
Vec3d L (100,0,300);
glColor3f(1,1,0);
glPointSize(20.0f);
glBegin(GL_POINTS);
glVertex3f(newMouseX,newMouseY,0);
glEnd();
float shade= L.dot(Normal);
glColor3f(shade*0.2, shade* 0.005, shade * 0.005);
glBegin(GL_TRIANGLE_STRIP);
//glBegin(GL_LINE_STRIP);
glVertex3f(A.x,A.y,A.z);
glVertex3f(B.x,B.y,B.z);
glVertex3f(C.x,C.y,C.z);
glEnd();
}
//*************************************************************
void drawMesh(){
const int meshW =40;
const int meshH =40;
Vec3d mesh [meshW] [meshH];
for( int x=0; x<meshW; x++){
for (int z=0; z< meshH; z++){
float y= 10 + sin(x);
mesh[x][z].x=x*20-350;
mesh[x][z].y= 15*sin(x)-200+ cos(z+mouseX*0.1)*10;
mesh[x][z].z=z*20;
}
}
for( int x=0; x<40-1; x++){
for( int z=0; z<40-1; z++)
{
Vec3d A= mesh[x][z];
Vec3d B= mesh[x+1][z];
Vec3d C= mesh[x+1][z+1];
drawShadedTriangle(A,B,C);
}
}
}
