martes, 22 de mayo de 2012

Código de Texturas.


#include "stdafx.h"
#include <GL\glut.h>
#include <stdio.h>


void Dibuja();
void Inicializa();
void CargaArchivos();




unsigned char TexYo[196608];//256*256*3 //El tres es por x-y-z


float ambiental[4]={0, 0, 0, 1},
 difusa[4]={1, 1, 1, 1},
 especular[4]={1, 1, 1, 1};




void main()
{
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(600,600);
glutInitWindowPosition(100,100);
    glutCreateWindow("Textura sencilla");
glutDisplayFunc(Dibuja);
Inicializa();
glutMainLoop();
}


//----------------inicializa------------------------------
void Inicializa()
{
glClearColor(0,0,0,0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(70,1,.1,1000);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
//glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);


CargaArchivos();
}


//-----------------dibuja----------------------------------------------
void Dibuja()
{
//int i,j;
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();


GLfloat ambientlight[4]  =    {0.5f ,0.5f ,0.5f ,1.0f};
float glfLightPosition[4] = {0.0, 2, 2.0, 1.0};
float glfLightDiffuse[4] = {0.7, 0.7, 0.7, 1.0};
float glfLightSpecular[4] = {0.7, 0.7, 0.7, 1.0};
//
//glLightfv(GL_LIGHT0,GL_AMBIENT,ambientlight);
glLightfv(GL_LIGHT0, GL_POSITION, glfLightPosition); // Se definen las
glLightfv(GL_LIGHT0, GL_DIFFUSE, glfLightDiffuse); //carácterísticas de la
glLightfv(GL_LIGHT0, GL_SPECULAR, glfLightSpecular);// luces
 glEnable(GL_LIGHT0);
 glEnable(GL_LIGHTING);


//---------------------------------------------------------------------------
 glPushMatrix();
glColor3d(1,1,1);
ambiental[0]=0;
ambiental[1]=1;
ambiental[2]=1;
ambiental[3] = 1;
especular[0]=0.8;
especular[1]=0.8;
especular[2]=0.8;
especular[3] = 1;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ambiental);
glMaterialfv(GL_FRONT, GL_SPECULAR, especular);
glMaterialf(GL_FRONT, GL_SHININESS, 30);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);

glTranslated(0,0,-5);
//------------------------------------------------------//
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,256,256,0,GL_RGB,GL_UNSIGNED_BYTE,TexYo);
glEnable(GL_TEXTURE_2D);
glutSolidTeapot(1);
glPopMatrix();


//----------------------------------------------------------//
glPushMatrix();

glTranslated(0,-3,0);

glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,256,256,0,GL_RGB,GL_UNSIGNED_BYTE,TexYo);
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2d(0,0);
glVertex3d(-1,-1,-7);
glTexCoord2d(0,1);
glVertex3d(-1,1,-7);
glTexCoord2d(1,1);
glVertex3d(1,1,-7);
glTexCoord2d(1,0);
glVertex3d(1,-1,-7);
glEnd();
glPopMatrix();
//--------------------------------------------------------------------------
glutSwapBuffers();
}






//----------carga archivos--------------------------------------------------------
void CargaArchivos(){
int i,j,alto,ancho;
FILE *arch;
unsigned char c;


//ABRE BMP
if((arch=fopen("rsYo.bmp","rb"))==NULL)
printf("Error abriendo el archivo");
else
{
alto=256;
ancho=256;
for(i=0;i<54;i++) //Los primeros 54 renglones del archivo BMP 
//contienen datos de cabecera entre los que se encuentran: 
//altura, anchura, etc.
fscanf(arch,"%c",&c); //recorremos las 53 posiciones del archivo.
for(i=0;i<alto;i++)
for(j=0;j<ancho;j++)
{
fscanf(arch,"%c",&c);
TexYo[ancho*3*i+3*j+2]=c; //256*3*0=0 //+ 3*0+2=2
   fscanf(arch,"%c",&c);
TexYo[ancho*3*i+3*j+1]=c; //256*3*0=0 //+3*0+1=1
fscanf(arch,"%c",&c);
TexYo[ancho*3*i+3*j]=c;//256*3*0=0//3*0=0

}
fclose(arch);
}
}

1 comentario: