+ glVertex3dv (p2); glNormal3dv (n1);
+ }
+ glEnd(); // QUAD_STRIP
+ }
+ glEndList();
+
+
+ glNewList (DISPLAYLIST_NO_COLOR, GL_COMPILE);
+ dXPos = -dXOffset;
+ for (ix = 0; ix < nx - 1; ix++, dXPos++) {
+ double dYPos = -dYOffset;
+ glBegin(GL_QUAD_STRIP);
+ double p1[3], p2[3], p3[3], n1[3];
+ p1[0] = dXPos; p1[1] = actScale * (v[ix][0] + actOffset); p1[2] = dYPos;
+ p2[0] = dXPos+1; p2[1] = actScale * (v[ix+1][0] + actOffset); p2[2] = dYPos;
+ p3[0] = dXPos; p3[1] = actScale * (v[ix][1] + actOffset); p3[2] = dYPos + 1;
+ CalculateVectorNormal<double> (p1, p2, p3, &n1[0], &n1[1], &n1[2]);
+
+ glVertex3dv (p1);
+ glNormal3dv (n1);
+ glVertex3dv (p2);
+ glNormal3dv (n1);
+ double lastP[3];
+ lastP[0] = ix; lastP[1] = actScale * (v[ix][0] + actOffset); lastP[2] = 0;
+ for (unsigned int iy = 1; iy < ny - 1; iy++, dYPos++) {
+ p1[0] = dXPos; p1[1] = actScale * (v[ix][iy] + actOffset); p1[2] = dYPos;
+ p2[0] = dXPos+1; p2[1] = actScale * (v[ix+1][iy] + actOffset); p2[2] = dYPos;
+ CalculateVectorNormal (p1, p2, lastP, &n1[0], &n1[1], &n1[2]);
+ lastP[0] = p1[0]; lastP[1] = p1[1]; lastP[2] = p1[2];
+ glVertex3dv (p1); glNormal3dv (n1);
+ glVertex3dv (p2); glNormal3dv (n1);
+ }