lunes, 5 de septiembre de 2016

Texturas ejercicio

Por:Ricardo Daniel Gonzalez Gomez
Captura de pantalla

Código
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>
#define PI 3.141592653

int ancho=128,alto=128, lados = 3;
float angX = 0, ang = 0;

unsigned char * datos;

int leerImagen(){
    FILE *imagen;
    imagen=fopen("/home/ricardo/Documentos/UAEMex/Graficacion/cla07/boy.raw","r");
    datos = (unsigned char*)malloc(ancho*alto*3);
    if(imagen==NULL){
        printf("Error: No imagen");
        return 0;
    }else{printf("OK: Imagen cargada correctamente\n");}
    fread(datos,ancho*alto*3,1,imagen);
    fclose(imagen);
    return 1;
    }
void teclado(unsigned char tecla, int x, int y)
{
    switch(tecla){
        case(27):
            exit(0);
        case('1')://girar izq
            ang -= 5;
            break;
        case('2')://girar der
            ang += 5;
            break;
        case('3')://menos lados
            if(lados > 3){
                lados -= 1;
            }
            break;
        case('4')://mas lados
            lados += 1;
            break;
        case('5')://rotar en X posi
            angX -= 5;
            break;
        case('6')://rotar en X posi
            angX += 5;
            break;                                                
        default:
            glutPostRedisplay();    break;
    }
    glutPostRedisplay();
}


void display(void){
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
        glRotatef(ang, 0, 0, 1);
        glRotatef(angX, 1, 0, 0);
        glBegin(GL_TRIANGLE_FAN);
            float teta, x, y;
            for (int i = 0; i < lados; ++i){
                teta =  (i * PI * 2) / lados;
                x = 2 * cos(teta) ;
                y = 2 * sin(teta) ;
                glTexCoord2f(x, y);glVertex2f(x, y);
            }
            //glTexCoord2f(0.0, 1.0);glVertex2f(-2.0, -2.0);
            //glTexCoord2f(1.0, 1.0);glVertex2f(2.0, -2.0);
            //glTexCoord2f(0.5, 0.0);glVertex2f(0.0, 2.0);

        glEnd();
    glPopMatrix();
    glFlush();
}

void usarTexturas(){
    leerImagen();
    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);
    glEnable(GL_TEXTURE_2D);
}


void Init(){
    glClearColor(0.0,0.0,0.0,0);
    gluOrtho2D(-2.5,2.5,-2.5,2.5);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    usarTexturas();
}

int main(int argc, char **argv){
    glutInit(&argc, argv);
    glutInitWindowSize(600,600);
    glutInitWindowPosition(10,10);
    glutCreateWindow ("Textura Sintética");
    Init();
    glutDisplayFunc(display);
    glutKeyboardFunc(teclado);
    glutMainLoop();
    return 0;

}
Descargar código
Descargar imagen

No hay comentarios:

Publicar un comentario