Practica 4

#include </usr/include/GL/glut.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#define PI 3.141592



int anchoV=2;
int altoV=2;
float incrx=0,incry=0,inc=0.1,dx,dy;
int ms00=2000;

int seg=0,min=15, hora=60;
int dirTec=3;


int ancho=128,alto=128;

unsigned char * datos;//es un apuntador hacia la variable datos

void leerImagen(){
    FILE *imagen;
    imagen=fopen("/home/artur/Escritorio/boy.raw","rb");
    datos=(unsigned char*)malloc(ancho*alto*3);//malloc sirve para partar memoria se aparta ancho por alto por 3
    if(imagen==NULL){
        printf("Error: No imagen\n");
    }else{printf("OK: Imagen cargada correctamente\n");}
    fread(datos,ancho*alto*3,1,imagen);
    fclose(imagen);
    }

void usarTexturas(){

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ancho, alto, 0, GL_RGB, GL_UNSIGNED_BYTE, datos);
   
}

void key(unsigned char c, int x, int y)
{
    if (c==27){
        exit(0);
    }
    if (c=='a'|| c=='A'){
        dirTec=4;
    }
        glutPostRedisplay();
}


void circulo(float cx,float cy,float radio,float r,float g,float b,float a1,float a2){

    glBegin(GL_POLYGON);
    glColor3f(1,1,1);
    for (float i=a1; i<a2; i+=0.01)
    {
        glTexCoord2f(cos(i)/2+0.5,sin(i)/2+.5);glVertex2f(cos(i)/2+0.5,sin(i)/2+.5);
        //dx=.5*cos(i)+cx;
        //dy=.5*sin(i)+cy;
        //glTexCoord2f(dx,dy);glVertex2f(dx, dy);

    }
    glEnd();
}



void cuadro(){ //FunciOn para dibujar el domino
    glColor3f(1, 1, 1);
   
    glBegin(GL_QUADS);
    glTexCoord2f(0.0, 1.0);glVertex2f(-10,-10);
    glTexCoord2f(1.0, 1.0);glVertex2f(10,-10);
    glTexCoord2f(1.0, 0.0);glVertex2f(10,10);
    glTexCoord2f(0.0, 0.0);glVertex2f(-10,10);
    glEnd();
}

void linea(){
    glLineWidth(3.0f);
    glBegin(GL_LINES);
        glVertex2f(0, 0);
        glVertex2f(0, .4);
    glEnd();
   
}

void temporizador(int value) {
    switch (value) {
        case 1 :
            glutTimerFunc(1000,temporizador,1);
            printf("Segundo\r");
            seg=seg-6;
            if(seg == -360){seg=0;}
            break;
        case 2 :
            glutTimerFunc(60000,temporizador,2);
            printf("Minuto\r");
            min=min-6;
            if(min == -360){min=0;}
            break;
        case 3 :
            glutTimerFunc(360000,temporizador,2);
            printf("Hora\r");
            hora=hora-6;
            if(hora == -360){hora=0;}
            break;
    }
    glutPostRedisplay();
}


void display(void){
    glClear(GL_COLOR_BUFFER_BIT);
   
    glPushMatrix();
        glRotatef(180,0,0,1);
        glTranslatef(-0.5f,-0.5f,0);
        circulo(0,0,1,1,0,0,0,2*3.1416);
      
    glPopMatrix();
    glPushMatrix();
        glColor3f(0,0,1);
        glRotatef(seg,0,0,1);
        linea();
    glPopMatrix();
   
    glPushMatrix();
        glColor3f(0,1,0);
        glRotatef(min,0,0,1);
        glScalef(.5, 0.8, 0.5);
        linea();
    glPopMatrix();


    glPushMatrix();
        glColor3f(1,0,0);
        glRotatef(hora,0,0,1);
        glScalef(0.5, 0.5, 0.5);
        linea();
    glPopMatrix();
   
    glFlush();
}


int main(int argc, char** argv){
    glutInit(&argc,argv);
    glutInitWindowSize(600,600);
    glutCreateWindow("Practica4");
   
    glClearColor(0.12,0.7,0.66,0);
   
    gluOrtho2D(-1,1,-1,1);
  
    leerImagen();
    usarTexturas();
   
    glutTimerFunc(1000,temporizador,1);
    glutTimerFunc(60000,temporizador,2);
    glutTimerFunc(360000,temporizador,3);
   
    glEnable(GL_TEXTURE_2D);
    glutKeyboardFunc(key);
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;

}

Comentarios