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