void dibujarMalla(){ glColor3f(0,1,0); calcularNormales(); float tamanioCuadro = 1.0/dimensionActual; float cordActualX, cordActualY = 1.0; for(int renglon=0; renglon<dimensionActual-1; renglon++){ cordActualX = 0.0; for(int columna=0; columna<dimensionActual-1; columna++){ glBegin(GL_TRIANGLES); glNormal3fv(cuadricula[renglon][columna].getVectorUnitario()); glTexCoord2f(cordActualX, cordActualY); glVertex3fv(cuadricula[renglon][columna].getPosicion()); glNormal3fv(cuadricula[renglon][columna+1].getVectorUnitario()); glTexCoord2f(cordActualX + tamanioCuadro, cordActualY); glVertex3fv(cuadricula[renglon][columna+1].getPosicion()); glNormal3fv(cuadricula[renglon+1][columna+1].getVectorUnitario()); glTexCoord2f(cordActualX + tamanioCuadro, cordActualY - tamanioCuadro); glVertex3fv(cuadricula[renglon+1][columna+1].getPosicion()); glEnd(); glBegin(GL_TRIANGLES); glNormal3fv(cuadricula[renglon][columna].getVectorUnitario()); glTexCoord2f(cordActualX, cordActualY); glVertex3fv(cuadricula[renglon][columna].getPosicion()); glNormal3fv(cuadricula[renglon+1][columna+1].getVectorUnitario()); glTexCoord2f(cordActualX + tamanioCuadro, cordActualY - tamanioCuadro); glVertex3fv(cuadricula[renglon+1][columna+1].getPosicion()); glNormal3fv(cuadricula[renglon+1][columna].getVectorUnitario()); glTexCoord2f(cordActualX, cordActualY - tamanioCuadro); glVertex3fv(cuadricula[renglon+1][columna].getPosicion()); glEnd(); cordActualX += tamanioCuadro; } cordActualY -= tamanioCuadro; } limpiarNormales(); }
void cuadro::initialize(int xx, int yy) { alto = yy; ancho = xx; int version = 0; int x = xx+1; int y = yy+1; if(xx < 3) x = 4; if(yy < 3) y = 4; if(version == 0) { //v1 vertices.resize(x*y); caras.resize(xx*yy*2); for(int i = 0,k=0,t=0; i < x; i++) { for(int j= 0; j < y; j++,k++) { vertices[k].x = i; vertices[k].y = j; vertices[k].z = 0.0; if(j != y-1 && i != x-1) { caras[t].x=k; caras[t].y=k+1; caras[t].z=k+y; t++; caras[t].x=k+1; caras[t].y=k+1+y; caras[t].z=k+y; t++; } } } } else { //versión rateando puntos int tamanio = x*4+y*4-16; vertices.resize(tamanio); tamanio = xx*yy*2-((xx-2)*(yy-2)*2); caras.resize(tamanio); //indice vertices int k = 0; //indice caras int t = 0; //pilar 1 for(int w = 0; w < 2; w++) for(int i = 0; i < y; i++,k++) { vertices[k].x = w;//cambiar si queremos centrar vertices[k].y = i;//cambiar si queremos centrar vertices[k].z = 0.0; if(w != 1 ) { if(i != y-1) { caras[t].x=k; caras[t].y=k+1; caras[t].z=k+y; t++; } if(i > 0) { caras[t].x=k; caras[t].y=k+y; caras[t].z=k+y-1; t++; } } else { if(i==0) { caras[t].x=k; caras[t].y=k+1; caras[t].z=k+y; t++; caras[t].x=k+1; caras[t].y=k+y; caras[t].z=k+y+1; t++; } else if(i == y-2) { caras[t].x=k; caras[t].y=k+1; caras[t].z=k+4; t++; caras[t].x=k+1; caras[t].y=k+5; caras[t].z=k+4; t++; } } } for(int i = 1; i < x-1; i++) { for(int j = 0; j < 4; j++) { if(i > 1 && i < (x-2)) { vertices[k].x = i; vertices[k].z = 0.0; if(j < 2) vertices[k].y = j; else vertices[k].y = y +j-4; if(j%2 == 0) { caras[t].x=k; caras[t].y=k+1; if(i != x-3 || j == 0) caras[t].z=k+4; else caras[t].z=k+y; t++; caras[t].x=k+1; if(i != x-3 || j == 0) { caras[t].y=k+4; caras[t].z=k+5; } else { caras[t].y=k+y; caras[t].z=k+y+1; } t++; } k++; // if(i < x-1 && j%2 != 0){ // caras[t].x=k; // caras[t].y=k+4; // caras[t].z=k+3; // t++; // } } } } //pilar 2 (casi igual que el 1) for(int w = x-2; w < x; w++) for(int i = 0; i < y; i++,k++) { vertices[k].x = w; vertices[k].y = i; vertices[k].z = 0.0; if(w != x-1 ) { if(i != y-1) { caras[t].x=k; caras[t].y=k+1; caras[t].z=k+y; t++; } if(i > 0) { caras[t].x=k; caras[t].y=k+y; caras[t].z=k+y-1; t++; } } } } //calcular coordenadas de textura // calcularCoordenadasTextura(x,y); colocar_textura(x,y); calcularNormales(); changeColor(1.0,0.2,0.7); };