• Sábado 21 de Diciembre de 2024, 11:00

Autor Tema:  Texturas en OpenGL  (Leído 4666 veces)

sasha95

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Texturas en OpenGL
« en: Sábado 11 de Abril de 2009, 05:01 »
0
Buenas, yo estoy recién aprendiendo OpenGL y tengo un problema con las texturas. Estoy siguiendo los tutoriales de usuarios.lycos.es/andromeda_studios y estoy programando la textura en base a eso. El problema es que el archivo se carga perfectamente, pero el cuadrado se renderiza totalmente blanco sin ninguna textura. Mi codigo dedicado a las texturas es este:
Código: C++
  1.  
  2. class Texture
  3. {
  4. public:
  5.     Texture();
  6.     ~Texture();
  7.  
  8.     void Delete();
  9.     void Use();
  10.  
  11.     bool LoadBMP(char *filename);
  12.     bool Make(char *filename);
  13. private:
  14.     unsigned int ID;
  15.     unsigned int width, height;
  16. };
  17.  
  18. Texture::Texture()
  19. {
  20.     ID = 0;
  21. }
  22. Texture::~Texture()
  23. {
  24.     Delete();
  25. }
  26.  
  27. void Texture::Delete()
  28. {
  29.     if (ID)
  30.     {
  31.         glDeleteTextures (1, &ID);
  32.         ID = 0;
  33.     }
  34. }
  35.  
  36. void Texture::Use()
  37. {
  38.     glBindTexture (GL_TEXTURE_2D, ID);
  39. }
  40.  
  41. bool Texture::Make(char *filename)
  42. {
  43.     glGenTextures (1, &ID);
  44.     //ID++;
  45.     glBindTexture (GL_TEXTURE_2D, ID);
  46.     glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  47.     glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
  48.     glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  49.     glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
  50.     glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
  51.     return true;
  52. }
  53.  
  54. bool Texture::LoadBMP(char*filename)
  55. {
  56.     FILE*Image;
  57.     AUX_RGBImageRec *BMP;
  58.     if (!filename)
  59.     {
  60.         MessageBox (NULL, "El nombre del archivo no es valido", "Error", MB_OK | MB_ICONEXCLAMATION);
  61.         return false;
  62.     }
  63.     Image = fopen (filename, "r");
  64.  
  65.     if (!Image)
  66.     {
  67.         MessageBox (NULL, "El archivo no existe", "Error", MB_OK | MB_ICONEXCLAMATION);
  68.         return false;
  69.     }
  70.     fclose (Image);
  71.     Make (filename);
  72.     BMP = auxDIBImageLoad (filename);
  73.  
  74.     width = BMP->sizeX;
  75.     height = BMP->sizeY;
  76.  
  77.     glTexImage2D (GL_TEXTURE_2D, 0, 3, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, BMP->data);
  78.     delete BMP->data;
  79.     delete BMP;
  80.     return true;
  81. }
  82.  
  83.  
Esa es la declaración de la clase. En el archivo main se encuentra esto:
Código: C++
  1.  
  2. TEXTURE = new Texture();
  3.     if (!TEXTURE->LoadBMP ("texture.bmp")) return 0;
  4.     CUADRADO = new Triangle[2]; //bueno esta es una clase que tambien es del tutorial pero que es bastante simple, no tiene ningun error...
  5.  
  6.     CUADRADO[0].Vertexes[0].Loc.Define (-1.0f, -1.0f, 0.0f); //Define son los vectores
  7.     CUADRADO[0].Vertexes[0].SetTexCoords (0.0f, 0.0f); // en SetTexCoords se definen las coordenadas de la textura...
  8.     CUADRADO[0].Vertexes[1].Loc.Define (-1.0f, 1.0f, 0.0f);
  9.     CUADRADO[0].Vertexes[1].SetTexCoords (0.0f, 1.0f);
  10.     CUADRADO[0].Vertexes[2].Loc.Define (1.0f, 1.0f, 0.0f);
  11.     CUADRADO[0].Vertexes[2].SetTexCoords (1.0f, 1.0f);
  12.  
  13.     CUADRADO[1].Vertexes[0].Loc.Define (-1.0f, -1.0f, 0.0f);
  14.     CUADRADO[1].Vertexes[0].SetTexCoords (0.0f, 0.0f);
  15.     CUADRADO[1].Vertexes[1].Loc.Define (1.0f, -1.0f, 0.0f);
  16.     CUADRADO[1].Vertexes[1].SetTexCoords (1.0f, 0.0f);
  17.     CUADRADO[1].Vertexes[2].Loc.Define (1.0f, 1.0f, 0.0f);
  18.     CUADRADO[1].Vertexes[2].SetTexCoords (1.0f, 1.0f);
  19.  
  20.  
Por ultimo, la funcion render:
Código: C++
  1.  
  2. int Render ()
  3. {
  4.     glClear (0x00004100);
  5.     glLoadIdentity();
  6.     glTranslatef(0.0f, 0.0f, zScale);
  7.     glRotatef (xAngle, 0.5, 0.0, 0.0);
  8.     glRotatef (yAngle, 0.0, 0.5, 0.0);
  9.     glRotatef (zAngle, 0.0, 0.0, 0.5);
  10.     TEXTURE->Use();
  11.     glBegin (GL_TRIANGLES);
  12.     for (int j = 0; j < 2; j++)
  13.     {
  14.     for (int i = 0; i < 3; i++)
  15.     {
  16.         glTexCoord2f (CUADRADO[j].Vertexes[i].U, CUADRADO[j].Vertexes[i].V); //bueno aca es donde se utilizan los parametros de SetTexCoords...
  17.         glVertex3f (CUADRADO[j].Vertexes[i].Loc.X,
  18.                     CUADRADO[j].Vertexes[i].Loc.Y,
  19.                     CUADRADO[j].Vertexes[i].Loc.Z);
  20.     }
  21.     }
  22.     glEnd();
  23.     return 1;
  24. }
  25.  
  26.  
El codigo es bastante largo pero por favor si pueden ayudarme se los agradeceria mucho toy re atascado xD
chau suerte y espero ayuda si no es problema  :hola:

vicengetorix

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Texturas en OpenGL
« Respuesta #1 en: Miércoles 27 de Mayo de 2009, 15:46 »
0
Habria que ver el programa conpleto.
De momento una sugerencia. Usa los tipo de datos de OpenGL como Gluint.

No se si sera eso pero yo probaria a definir los vertices en sentido contrario a las agujas del relog.

En mi pagina estoy haciendo un tutorial muy facil de entender de hacer juegos con OpenGL y C++.
El capitulo de texturaras ya esta publicado.
Echale unvistazo por si te vale:

http dos puntos barra barra unsitioweb  punto com

Suerte.

killito

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Texturas en OpenGL
« Respuesta #2 en: Miércoles 17 de Febrero de 2010, 23:11 »
0
Cuando aparece la textura blanca es que no se ha cargado la textura, como si no se hubiese encontrado el archivo, cuando aparece gris es lo mismo pero con la iluminacion activada