#include <stdio.h>
#include <stdlib.h>
#include <GL/gl.h>
#include <GL/glut.h>
#include <GL/glaux.h>
#define KEY_ESCAPE 27
//se define la cantidad de texturas que se manejaran
#define NTextures 1
//UINT g_Texture[200];
GLuint texture[NTextures];
//variables para manejo de texturas
char *texturefiles[] = {
"TextNube.bmp"
};
int LoadTextures()
{
AUX_RGBImageRec *TextureImage;
int i;
//se recorre el arreglo de imagenes para cargarlas en memoria
for(i=0; i < NTextures; i++)
{
TextureImage=auxDIBImageLoad(texturefiles[i]);
if ( TextureImage )
{
glGenTextures(1, &texture[i]);
glBindTexture(GL_TEXTURE_2D, texture[i]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
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, 3,
TextureImage->sizeX,
TextureImage->sizeY,
0, GL_RGB, GL_UNSIGNED_BYTE,
TextureImage->data);
free(TextureImage->data);
free(TextureImage);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
}
else
return 0;
}
return 1;
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen and Depth Buffer
glLoadIdentity();
glTranslatef(0.0f,0.0f,-3.0f);
glColor3f(1.0f,1.0f,1.0f);
//activa la textura
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture[0]);
/*
CODIGO PARA GENERAR UN TRIANGULO:
LOS VERTICES DEBEN SER SITUADOS EN EL SENTIDO INVERSO A LAS MANECILLAS DE RELOJ
*/
glBegin(GL_TRIANGLES);
glTexCoord2f(0.0f,1.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glTexCoord2f(-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f, 0.0f);
glTexCoord2f(1.0f,-1.0f);
glVertex3f( 1.0f,-1.0f, 0.0f);
glEnd();
glDisable(GL_TEXTURE_2D);
glutSwapBuffers();
}
/*
FUNCION QUE INICIALIZA VARIOS PARAMETROS DEL AMBIENTE OPENGL
EL TRIANGULO SE VISUALIZA EN UN AMBIENTE 2D, PERO SE MANEJA PROFUNDIDAD
*/
void init ()
{
glMatrixMode(GL_PROJECTION);
glViewport(0, 0, 640, 480);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
GLfloat aspect = (GLfloat) 640 / 480;
gluPerspective(45, aspect, 1.0f, 500.0f);
glMatrixMode(GL_MODELVIEW);
glShadeModel( GL_SMOOTH );
glClearDepth( 1.0f );
glEnable( GL_DEPTH_TEST );
glDepthFunc( GL_LEQUAL );
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
glClearColor(0.0, 0.0, 0.0, 1.0);
}
void keyboard ( unsigned char key, int mousePositionX, int mousePositionY )
{
switch ( key )
{
case KEY_ESCAPE:
exit ( 0 );
break;
default:
break;
}
}
int main(int argc, char **argv)
{
//se inicializa la pantalla grafica
glutInit(&argc, argv);
//establece el modo de visualizacion
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH );
//Establece la posicion de la esquina superior izquierda del grafico en la pantalla
glutInitWindowPosition(100,100);
//se establece el ancho y la altura de la ventana de visualizacion
glutInitWindowSize(500,500);
//se crea la ventana de visualizacion
glutCreateWindow("Triangulo con texturas");
//se registra la funcion display para el dibujado de la imagen
if(!LoadTextures()) return 0;
glutDisplayFunc(display);
glutIdleFunc(display);
//se registra el manejo de teclado
glutKeyboardFunc( keyboard );
//se inicializan todos los parametros del ambiente grafico
init();
//se manda a llamar el ciclo principal
glutMainLoop();
return 0;
}
Comentarios sobre la versión: 1.0 (0)
No hay comentarios