Principal | Gráficos 3D | Gráficos 2D | Fractales | Math | Códigos | Tutoriales | Links
Esta seccion me falta terminarla, sepan disculpar, el codigo fuente esta terminado.
Imagenes utilizadas como texturas, son 6 imagenes de 256x256 pixels, en formato bmp.
![]() |
Cubo con la textura aplicada, con diferentes angulos de rotacion.
![]() |
![]() |
#include <GL\glut.h>
#include <GL\glaux.h>
#include <windows.h>
#include <math.h>
class COGLTexture
{
public:
_AUX_RGBImageRec *Image;
unsigned int GetID();
void LoadFromFile(char *filename);
void SetActive();
int GetWidth();
int GetHeight();
private:
int Width, Height;
unsigned int ID;
};
COGLTexture Tex1, Tex2, Tex3, Tex4, Tex5, Tex6;
GLfloat XRotated=0.0;
GLfloat YRotated=0.0;
GLfloat ZRotated=0.0;
void COGLTexture::LoadFromFile(char *filename)
{
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(1,&ID);
glBindTexture( GL_TEXTURE_2D, ID);
Image = auxDIBImageLoadA( (const char*) filename );
Width = Image->sizeX;
Height = Image->sizeY;
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, Image->sizeX, Image->sizeY, GL_RGB,
GL_UNSIGNED_BYTE, Image->data);
delete Image;
}
void COGLTexture::SetActive()
{
glBindTexture( GL_TEXTURE_2D, ID);
}
unsigned int COGLTexture::GetID()
{
return ID;
}
void InitTextures(void)
{
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_NEAREST_MIPMAP_NEAREST);
Tex1.LoadFromFile("textura1.bmp");
Tex2.LoadFromFile("textura2.bmp");
Tex3.LoadFromFile("textura3.bmp");
Tex4.LoadFromFile("textura4.bmp");
Tex5.LoadFromFile("textura5.bmp");
Tex6.LoadFromFile("textura6.bmp");
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
}
void DrawCube(void)
{
glEnable(GL_TEXTURE_2D);
//left:
Tex1.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(1.0,0.0);
glVertex3f(-0.5,-0.5,-0.5);
glTexCoord2f(1.0,1.0);
glVertex3f(-0.5,0.5,-0.5);
glTexCoord2f(0.0,1.0);
glVertex3f(-0.5,0.5,0.5);
glTexCoord2f(0.0,0.0);
glVertex3f(-0.5,-0.5,0.5);
glEnd();
//right:
Tex2.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f(0.5,-0.5,-0.5);
glTexCoord2f(1.0,0.0);
glVertex3f(0.5,-0.5,0.5);
glTexCoord2f(1.0,1.0);
glVertex3f(0.5,0.5,0.5);
glTexCoord2f(0.0,1.0);
glVertex3f(0.5,0.5,-0.5);
glEnd();
//front:
Tex3.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f(-0.5,-0.5,0.5);
glTexCoord2f(0.0,1.0);
glVertex3f(-0.5,0.5,0.5);
glTexCoord2f(1.0,1.0);
glVertex3f(0.5,0.5,0.5);
glTexCoord2f(1.0,0.0);
glVertex3f(0.5,-0.5,0.5);
glEnd();
//back:
Tex4.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex3f(-0.5,-0.5,-0.5);
glTexCoord2f(1.0,0.0);
glVertex3f(0.5,-0.5,-0.5);
glTexCoord2f(1.0,1.0);
glVertex3f(0.5,0.5,-0.5);
glTexCoord2f(0.0,1.0);
glVertex3f(-0.5,0.5,-0.5);
glEnd();
//top:
Tex5.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(1.0,0.0);
glVertex3f(-0.5,0.5,-0.5);
glTexCoord2f(1.0,1.0);
glVertex3f(0.5,0.5,-0.5);
glTexCoord2f(0.0,1.0);
glVertex3f(0.5,0.5,0.5);
glTexCoord2f(0.0,0.0);
glVertex3f(-0.5,0.5,0.5);
glEnd();
//bottom:
Tex6.SetActive();
glBegin(GL_QUADS);
glTexCoord2f(1.0,0.0);
glVertex3f(-0.5,-0.5,-0.5);
glTexCoord2f(1.0,1.0);
glVertex3f(-0.5,-0.5,0.5);
glTexCoord2f(0.0,1.0);
glVertex3f(0.5,-0.5,0.5);
glTexCoord2f(0.0,0.0);
glVertex3f(0.5,-0.5,-0.5);
glEnd();
glDisable(GL_TEXTURE_2D);
}
void reshape(int x, int y)
{
if (y == 0 || x == 0)
return;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0,(GLdouble)x/(GLdouble)y,0.5,10.0);
glMatrixMode(GL_MODELVIEW);
glViewport(0,0,x,y);
}
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef (0.0, 0.0, -2.5);
glRotatef(XRotated,1.0,0.0,0.0);
glRotatef(YRotated,0.0,1.0,0.0);
DrawCube();
glFlush();
glutSwapBuffers();
}
void KeyDown(unsigned char key, int x, int y)
{
switch (key)
{
case 27: //ESC
PostQuitMessage(0);
break;
}
}
void Idle(void)
{
XRotated += 1.0;
YRotated += 5.0;
Display();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(300,300);
glutCreateWindow("Multiples Texturas");
glFrontFace(GL_CW);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
InitTextures();
glutDisplayFunc(Display);
glutReshapeFunc(reshape);
glutKeyboardFunc(KeyDown);
glutIdleFunc(Idle);
glutMainLoop();
return 0;
}
|
valcoey@hotmail.com
Ramiro Alcocer, 2001
Principal | Gráficos 3D | Gráficos 2D | Fractales | Math | Códigos | Tutoriales | Links