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;
}
Suscribirse a:
Comentarios de la entrada (Atom)

No hay comentarios.:
Publicar un comentario