martes, 6 de marzo de 2018

Practica Multitextura




#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
#include<stdio.h>
#include<stdlib.h>


int ancho=128,alto=128;
float ang=0;
float posx=-2,posy=0;
unsigned char * datos;
unsigned char * datos2;

void leerImagen1(){
    FILE *imagen;
    imagen=fopen("/home/artur/Pictures/Gokupixel.raw","r");
    if(imagen==NULL){printf("Error: No imagen");}
    else{printf("Imagen cargada correctamente");}
   
    datos=(unsigned char*)malloc(ancho*alto*3);
    fread(datos,ancho*alto*3,1,imagen);
    fclose(imagen);
}

void leerImagen2(){
    FILE *imagen;
    imagen=fopen("/home/artur/Pictures/sol.raw","r");
    if(imagen==NULL){printf("Error: No imagen");}
    else{printf("Imagen cargada correctamente");}
   
    datos2=(unsigned char*)malloc(ancho*alto*3);
    fread(datos2,ancho*alto*3,1,imagen);
    fclose(imagen);
}

void usarTextura2(){
    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, datos2);
}


void usarTextura1(){
    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 cuaTex(){
    glTranslatef(-.5,-.5,0);
    glBegin(GL_QUADS);
        glTexCoord2f(1.0, 1.0);glVertex2f(1.0, 0.0);
        glTexCoord2f(0.0, 1.0);glVertex2f(0.0, 0.0);
        glTexCoord2f(0.0, 0.0);glVertex2f(0.0, 1.0);
        glTexCoord2f(1.0, 0.0);glVertex2f(1.0, 1.0);
    glEnd();
}



void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1, 1, 1); 
                           
        glPushMatrix();
        glScalef(4,4,4);
        glTranslatef(-posx,posy,0);
        glRotatef(ang,0,0,1);  
        usarTextura1();
        cuaTex();
        glPopMatrix();
           
        glPushMatrix();
        glScalef(4,4,4);
        glTranslatef(posx,posy,0);
        glRotatef(-ang*2,0,0,1);  
        usarTextura2();
        cuaTex();
        glPopMatrix();


    glFlush();
}


void temporizador(int value) {
    switch (value) {
        case 1 :
            ang=ang+.4;if (ang==360){ang=0;}
            glutPostRedisplay();
            glutTimerFunc(1,temporizador,1);
            break;
       
    }
}

void moveMouse(int x,int y)
{
        posx=x;
        posy=20-y;
        glutPostRedisplay();
}

void teclado(unsigned char tecla, int x, int y)
{
    switch(tecla){
        case(27):
            exit(0);
        case ('a'):
            ang++;
            break;
        case ('d'):
            ang--;
            break;
        default:
            break;
    }
    glutPostRedisplay();
}

int main(int argc, char **argv){
    glutInit(&argc, argv);
    glutInitWindowSize(600,600);
    glutInitWindowPosition(10,10);
    glutCreateWindow ("Textura Sintetica");

    glutTimerFunc(0,temporizador,1);
   
    leerImagen1();
    leerImagen2();
   
    glClearColor(0.0,0.0,0.0,0);
    gluOrtho2D(-10,10,-10,10);
   
    glEnable(GL_TEXTURE_2D);

    glutMotionFunc(moveMouse);//manda llamar el metodo motion
   

    glutDisplayFunc(display);
    glutKeyboardFunc(teclado);
    glutMainLoop();
    return 0;
}

No hay comentarios.:

Publicar un comentario