Beispiel #1
0
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();
}
Beispiel #2
0
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);
};