Ejemplo n.º 1
0
void tela_saida()
{

    LIMPAR_TELA();    
    desenha_janela(5,10,19,70, PRETO);
    POS(7,23);
    printf("OBRIGADO POR JOGAR PORRINHA FIGHT");
    POS(23,0);
    printf("\x1B[4%cm ", PRETO); //deixa o fundo preto


}
Ejemplo n.º 2
0
void Desenho::desenha_predio (float pos_x, float pos_y, float pos_z, float aberturaPorta = 0, float aberturaPortaLateral = 0) {
    Desenha_gl gl (pos_x, pos_y, pos_z, proporcao);

    // variáveis auxiliares de posição
    float x, y, z;

    float corParede[3] = {0xa3/256.0, 0x90/256.0, 0x7f/256.0};
    float corPortao[3] = {0x23/256.0, 0x36/256.0, 0x4f/256.0};
    float corTelhado[3] = {0x61/256.0, 0x2c/256.0, 0x1c/256.0};
    
    float paredeLargura = 0.1;
    float frontalComp = 15.0, frontalAltura = 6.5;
    float lateralComp = 7.0, lateralAltura = 5.0;
    float entradaGaragemAltura = 2.7;
    float entradaGaragemLargura = 4;
    float portaoGaragemAltura = 2.2;
    float portaoGaragemLargura = 1;
    float portaoGaragemEspessura = 0.05;
    float portaLateralAltura = 2;
    float portaLateralLargura = 1;
    float portaLateralEspessura = 0.03;

    // inicia a composicao do predio

    // Desenha chão
    glColor3f (0.0, 0.29, 0.0);
    glBegin (GL_QUADS);
        glVertex3f (-10000, 0, -10000);
        glVertex3f (-10000, 0,  10000);
        glVertex3f ( 10000, 0,  10000);
        glVertex3f ( 10000, 0, -10000);
    glEnd();
    // Desenha chão no interior do prédio
    glColor3f (0.8, 0.8, 0.8);
    glBegin (GL_QUADS);
        x = proporcao * frontalComp / 2;
        z = proporcao * lateralComp;
        y = 0.05;
        glVertex3f (-x, y, -z);
        glVertex3f (-x, y,  0);
        glVertex3f ( x, y,  0);
        glVertex3f ( x, y, -z);
    glEnd();
    // Desenha forro no interior do prédio
    glColor3f ( corParede[0], corParede[1], corParede[2] );
    glBegin (GL_QUADS);
        y = proporcao * (lateralAltura - 0.1);
        glVertex3f (-x, y,  0);
        glVertex3f (-x, y, -z);
        glVertex3f ( x, y, -z);
        glVertex3f ( x, y,  0);
    glEnd();
    
    // parede frontal
    gl.define_deslocamento (0, frontalAltura / 2, 0);
    gl.define_escala (frontalComp + paredeLargura, frontalAltura, paredeLargura);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();
    // desenha janelas
    desenha_janela (0, proporcao * 1.5, 0);
    desenha_janela (-proporcao * (1.4), proporcao * 1.5, 0);
    desenha_janela ( proporcao * (1.4), proporcao * 1.5, 0);
    desenha_janela (-proporcao * (frontalComp / 4 - 0.5), proporcao * 1.5, 0);
    desenha_janela ( proporcao * (frontalComp / 4 - 0.5), proporcao * 1.5, 0);
    desenha_janela (-proporcao * (frontalComp / 2.6), proporcao * 1.5, 0);
    desenha_janela ( proporcao * (frontalComp / 2.6), proporcao * 1.5, 0);
    glColor3f ( corParede[0], corParede[1], corParede[2] );

    // parede de fundo
    y = lateralAltura / 2;
    gl.define_deslocamento (0, y, -lateralComp);
    gl.define_escala (frontalComp, lateralAltura, paredeLargura);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();
    
    // parede lateral esquerda
    gl.define_deslocamento (-frontalComp / 2, y, -lateralComp / 2);
    gl.define_escala (paredeLargura, lateralAltura, lateralComp);
    gl.desenha_cubo();

    // parede lateral direita
    /// parte de cima
    y = (lateralAltura - portaLateralAltura) / 2;
    y += portaLateralAltura;
    gl.define_deslocamento (frontalComp / 2, y, -lateralComp / 2);
    y = lateralAltura - portaLateralAltura;
    gl.define_escala (paredeLargura, y, lateralComp);
    gl.desenha_cubo();
    /// parte esquerda
    y = portaLateralAltura / 2;
    z = (-lateralComp + portaLateralLargura) / 4;
    gl.define_deslocamento (frontalComp / 2, y, z);
    gl.define_escala (paredeLargura, y * 2, z * 2);
    gl.desenha_cubo();
    /// parte direita
    z = (-3*lateralComp - portaLateralLargura) / 4;
    gl.define_deslocamento (frontalComp / 2, y, z);
    z = (-lateralComp + portaLateralLargura) / 4;
    gl.define_escala (paredeLargura, y * 2, z * 2);
    gl.desenha_cubo();

    // porta lateral
    glColor3f ( corPortao[0], corPortao[1], corPortao[2] );
    x = frontalComp / 2 + portaLateralLargura * (cos (aberturaPortaLateral * PI / 180) - 1) / 2;
    y = portaLateralAltura / 2;
    z = -lateralComp / 2 + portaLateralLargura * sin (aberturaPortaLateral * PI / 180) / 2;
    gl.define_deslocamento (x, y, z);
    gl.define_escala (portaLateralEspessura, portaLateralAltura, portaLateralLargura);
    gl.define_rotacao (aberturaPortaLateral, 0, 1, 0);
    gl.desenha_cubo();
    glColor3f ( corParede[0], corParede[1], corParede[2] );
    gl.define_rotacao (0, 0, 0, 0);

    // parede lateral da garagem
    x = frontalComp / 2 + entradaGaragemLargura;
    gl.define_deslocamento (x, entradaGaragemAltura / 2, -lateralComp / 2);
    gl.define_escala (paredeLargura, entradaGaragemAltura, lateralComp);
    gl.desenha_cubo();
    // contorno sobre o muro
    glColor3f ( corParede[0]-0.1, corParede[1]-0.1, corParede[2]-0.1 );
    y = entradaGaragemAltura + paredeLargura / 4;
    gl.define_deslocamento (x, y, -lateralComp / 2);
    gl.define_escala (paredeLargura, paredeLargura / 2, lateralComp);
    gl.desenha_cubo();
    glColor3f ( corParede[0], corParede[1], corParede[2] );

    // parede do fundo da garagem
    x = frontalComp / 2 + entradaGaragemLargura / 2;
    gl.define_deslocamento (x, entradaGaragemAltura / 2, -lateralComp);
    gl.define_escala (entradaGaragemLargura, entradaGaragemAltura, paredeLargura);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();
    // contorno sobre o muro
    glColor3f ( corParede[0]-0.1, corParede[1]-0.1, corParede[2]-0.1 );
    gl.define_deslocamento (x, y, -lateralComp);
    gl.define_escala (entradaGaragemLargura, paredeLargura / 2, paredeLargura);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();
    glColor3f ( corParede[0], corParede[1], corParede[2] );
    
    // entrada da garagem
    /// lado esquerdo
    x = frontalComp + entradaGaragemLargura / 2;
    x = (x + 0.4 - portaoGaragemLargura) / 2;
    gl.define_deslocamento (x, entradaGaragemAltura / 2, 0);
    x = entradaGaragemLargura / 2 + 0.4 - portaoGaragemLargura;
    gl.define_escala (x, entradaGaragemAltura, paredeLargura);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();
    ///lado direito
    x = frontalComp + 3 * entradaGaragemLargura / 2;
    x = (x + 0.4 + portaoGaragemLargura) / 2;
    gl.define_deslocamento (x, entradaGaragemAltura / 2, 0);
    x = entradaGaragemLargura / 2 - 0.4 - portaoGaragemLargura;
    gl.define_escala (x, entradaGaragemAltura, paredeLargura);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();
    /// lado superior
    x = (frontalComp + entradaGaragemLargura) / 2 + 0.4;
    y = (entradaGaragemAltura + portaoGaragemAltura) / 2;
    gl.define_deslocamento (x, y, 0);
    y = entradaGaragemAltura - portaoGaragemAltura;
    gl.define_escala (portaoGaragemLargura * 2, y, paredeLargura);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();
    // contorno sobre o muro
    glColor3f ( corParede[0]-0.1, corParede[1]-0.1, corParede[2]-0.1 );
    x = (frontalComp + entradaGaragemLargura) / 2;
    gl.define_deslocamento (x, entradaGaragemAltura + paredeLargura / 4, 0);
    gl.define_escala (entradaGaragemLargura, paredeLargura / 2, paredeLargura);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();
    glColor3f ( corParede[0], corParede[1], corParede[2] );

    // portão da garagem
    /// portão 1
    glColor3f ( corPortao[0], corPortao[1], corPortao[2] );
    y = portaoGaragemAltura;
    z = portaoGaragemEspessura;
    x = frontalComp / 2 + entradaGaragemLargura / 2 + 0.4;
    x += -1 + portaoGaragemLargura * cos (aberturaPorta * PI / 180) / 2;
    gl.define_deslocamento ( x, portaoGaragemAltura / 2, -sin (aberturaPorta * PI / 180) / 2 );
    gl.define_escala (portaoGaragemLargura, y, z);
    gl.define_rotacao ( aberturaPorta, 0, 1, 0);
    gl.desenha_cubo();
    /// portão 2
    x = frontalComp / 2 + entradaGaragemLargura / 2 + 0.4;
    x += 1 - portaoGaragemLargura * cos (aberturaPorta * PI / 180) / 2;
    gl.define_deslocamento ( x, portaoGaragemAltura / 2, -sin (aberturaPorta * PI / 180) / 2 );
    gl.define_escala (portaoGaragemLargura, y, z);
    gl.define_rotacao (-aberturaPorta, 0, 1, 0);
    gl.desenha_cubo();

    //// pilares frontais
    // pilar lateral esquerda
    glColor3f ( corParede[0]+0.1, corParede[1]+0.1, corParede[2]+0.1 );
    gl.define_deslocamento (-frontalComp / 2 + 0.15, frontalAltura / 2, 0.05);
    gl.define_escala (0.3, frontalAltura, 0.05);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();

    // pilar lateral direita
    gl.define_deslocamento (frontalComp / 2 - 0.15, frontalAltura / 2, 0.05);
    gl.define_escala (0.3, frontalAltura, 0.05);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();

    // segundo pilar lateral esquerdo
    gl.define_deslocamento (-frontalComp / 3.5 + 0.15, frontalAltura / 2, 0.05);
    gl.define_escala (0.3, frontalAltura, 0.05);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();

    // segundo pilar lateral direita
    gl.define_deslocamento (frontalComp / 3.5 - 0.15, frontalAltura / 2, 0.05);
    gl.define_escala (0.3, frontalAltura, 0.05);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();

    // pilar do meio lateral esquerdo
    gl.define_deslocamento (-frontalComp / 6 + 0.15, frontalAltura / 2 -0.25, 0.05);
    gl.define_escala (0.3, frontalAltura-2.5, 0.05);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();

    // pilar do meio lateral direita
    gl.define_deslocamento (frontalComp / 6 - 0.15, frontalAltura / 2 -0.25, 0.05);
    gl.define_escala (0.3, frontalAltura-2.5, 0.05);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();

    // viga inferior
    gl.define_deslocamento (0, 1, 0.05);
    gl.define_escala (frontalComp, 0.3, 0.05);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();

    // viga superior (esta é detalhada)
    glColor3f ( corParede[0]+0.16, corParede[1]+0.16, corParede[2]+0.16 );
    gl.define_deslocamento (0, frontalAltura - 1.3, 0.12);
    gl.define_escala (frontalComp, 0.1, 0.09);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();
    glColor3f ( corParede[0]+0.13, corParede[1]+0.13, corParede[2]+0.13 );
    gl.define_deslocamento (0, frontalAltura - 1.4, 0.09);
    gl.define_escala (frontalComp, 0.1, 0.07);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();
    glColor3f ( corParede[0]+0.1, corParede[1]+0.1, corParede[2]+0.1 );
    gl.define_deslocamento (0, frontalAltura - 1.5, 0.06);
    gl.define_escala (frontalComp, 0.1, 0.06);
    gl.define_rotacao (0, 0, 0, 0);
    gl.desenha_cubo();

    // telhado
    glColor3f ( corTelhado[0], corTelhado[1], corTelhado[2] );
    gl.define_deslocamento (0, lateralAltura-0.3+sin(-60)*lateralComp/4, -lateralComp/4);
    gl.define_escala (frontalComp, 0.05+lateralComp/(2*cos(-60)), 0.05);
    gl.define_rotacao (-80, 1, 0, 0);
    gl.desenha_cubo();
    gl.define_deslocamento (0, lateralAltura-0.3+sin(-60)*lateralComp/4, -lateralComp*3/4);
    gl.define_escala (frontalComp, 0.05+lateralComp/(2*cos(-60)), 0.05);
    gl.define_rotacao (80, 1, 0, 0);
    gl.desenha_cubo();

    // Detalhe sobre os muros laterais 
    // muro esquerdo
    glBegin (GL_POLYGON);
        glColor3f ( corParede[0], corParede[1], corParede[2] );
        x = -proporcao * frontalComp / 2 - proporcao * paredeLargura / 2;
        y = proporcao * lateralAltura;
        z = -proporcao * paredeLargura / 2;
        glVertex3f (x, y, z);
        y = proporcao * frontalAltura;
        glVertex3f (x, y, z);
        z -= proporcao * 0.5;
        y -= proporcao * 0.8;
        glVertex3f (x, y, z);
        z -= proporcao * 0.4;
        y -= proporcao * 0.1;
        glVertex3f (x, y, z);
        y = proporcao * lateralAltura;
        glVertex3f (x, y, z);
    glEnd();
    glBegin (GL_POLYGON);
        glVertex3f (x, y, z);
        y = proporcao * (frontalAltura - 0.9);
        glVertex3f (x, y, z);
        z -= proporcao * 0.3;
        glVertex3f (x, y, z);
        y = proporcao * lateralAltura;
        glVertex3f (x, y, z);
    glEnd();
    glBegin (GL_POLYGON);
        glVertex3f (x, y, z);
        y = proporcao * (frontalAltura - 0.9);
        glVertex3f (x, y, z);
        z -= proporcao * 2;
        y += proporcao * 0.7;
        glVertex3f (x, y, z);
        y = proporcao * lateralAltura;
        glVertex3f (x, y, z);
    glEnd();
    glBegin (GL_POLYGON);
        glVertex3f (x, y, z);
        y = proporcao * (frontalAltura - 0.2);
        glVertex3f (x, y, z);
        z = -proporcao * lateralComp;
        y = proporcao * lateralAltura;
        glVertex3f (x, y, z);
    glEnd();
    // Detalhe sobre os muros laterais 
    // muro direito
    glBegin (GL_POLYGON);
        glColor3f ( corParede[0], corParede[1], corParede[2] );
        x = proporcao * frontalComp / 2 + proporcao * paredeLargura / 2;
        y = proporcao * lateralAltura;
        z = -proporcao * paredeLargura / 2;
        glVertex3f (x, y, z);
        y = proporcao * frontalAltura;
        glVertex3f (x, y, z);
        z -= proporcao * 0.5;
        y -= proporcao * 0.8;
        glVertex3f (x, y, z);
        z -= proporcao * 0.4;
        y -= proporcao * 0.1;
        glVertex3f (x, y, z);
        y = proporcao * lateralAltura;
        glVertex3f (x, y, z);
    glEnd();
    glBegin (GL_POLYGON);
        glVertex3f (x, y, z);
        y = proporcao * (frontalAltura - 0.9);
        glVertex3f (x, y, z);
        z -= proporcao * 0.3;
        glVertex3f (x, y, z);
        y = proporcao * lateralAltura;
        glVertex3f (x, y, z);
    glEnd();
    glBegin (GL_POLYGON);
        glVertex3f (x, y, z);
        y = proporcao * (frontalAltura - 0.9);
        glVertex3f (x, y, z);
        z -= proporcao * 2;
        y += proporcao * 0.7;
        glVertex3f (x, y, z);
        y = proporcao * lateralAltura;
        glVertex3f (x, y, z);
    glEnd();
    glBegin (GL_POLYGON);
        glVertex3f (x, y, z);
        y = proporcao * (frontalAltura - 0.2);
        glVertex3f (x, y, z);
        z = -proporcao * lateralComp;
        y = proporcao * lateralAltura;
        glVertex3f (x, y, z);
    glEnd();

    // desenha lâmpadas
    x = -6;
    y =lateralAltura - 0.1;
    z = lateralComp / 2;
    gl.define_escala (1.2, 0.03, 0.03);
    gl.define_rotacao (0, 0, 0, 0);
    for (x = -6; x <= 6; x += 3) {
        for (z = lateralComp / 2 - 3; z <= lateralComp / 2 + 3; z += 3) {
            glColor3f (1, 1, 1);
            gl.define_deslocamento (x, y, -z-0.03);
            gl.desenha_cubo();
            gl.define_deslocamento (x, y, -z+0.03);
            gl.desenha_cubo();
            glColor3f (0.8, 0.8, 0.8);
            glBegin (GL_POLYGON);
                glVertex3f (pos_x+proporcao*(x-0.7), pos_y+proporcao*(y-0.01), pos_z+proporcao*(-z-0.08));
                glVertex3f (pos_x+proporcao*(x-0.7), pos_y+proporcao*(y-0.01), pos_z+proporcao*(-z+0.08));
                glVertex3f (pos_x+proporcao*(x+0.7), pos_y+proporcao*(y-0.01), pos_z+proporcao*(-z+0.08));
                glVertex3f (pos_x+proporcao*(x+0.7), pos_y+proporcao*(y-0.01), pos_z+proporcao*(-z-0.08));
            glEnd();
        }
    }
}