P.O.O, Estructura de Datos, Tópicos Selectos de Programación, Fundamentos de Programación, Teoría de la Computación, Matemáticas para Computadoras, Fundamentos de Desarrollo de Sistemas, Programación Web, Graficación.
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);
}
}
Suscribirse a:
Enviar comentarios (Atom)
y cual es la textura que devemmos de ver??
ResponderEliminar