Hola a todos,
Soy novato en programación C++, por lo que ruego paciencia. Estoy practicando a poner texturas y no sé porque me da error. Adjunto código, versión del software y librerias linkadas en las propiedades del proyecto.
MS Visual Studio 2005
librerias cargadas en el poryecto:
opengl32.lib
glu32.lib
glaux.lib
odbc32.lib
odbccp32.lib
Cargar en memoria la textura, declarando previamente GLuint texture [10] (array para 10 texturas aunque solo estoy probando ahora para 1)
AUX_RGBImageRec *texture[10];
AUX_RGBImageRec *LoadBMP(char *Filename) // Loads A Bitmap Image
{
FILE *File=NULL;
if (!Filename)
{ return NULL; }
File=fopen(Filename,"r");
if (File)
{
fclose(File);
return auxDIBImageLoad(Filename); //Carga el bitmap en memoria y devuelve un puntero a la dirección de memoria
}
return NULL;
//Pegado sobre el polígono
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
//Filtros
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_DECAL);
//Cargamos un fichero bmp en el array
texture[0]=LoadBMP("C:\\Home\\C20190\\Visual Studio 2005\\Projects\\Prueba\\Numbers_Textures\\Number_0_Courier_14.bmp");
//Activamos las texturas
glEnable(GL_TEXTURE_2D);
}
Luego escribo en la función dibujo el siguiente código para pintar la textura:
void Draw()
{
float ancho = 3.0;
float alto = 3.0;
glTexImage2D(GL_TEXTURE_2D,0,3,texture[0]->sizeX, texture[0]->sizeY,
0,GL_RGB,GL_UNSIGNED_BYTE,texture[0]->data);
glBegin(GL_POLYGON);
glNormal3f(0,0,1);
glTexCoord2i(0,0); //Asignamos las coordenadas de textura del siguiente vértice.
glVertex3f(-ancho/2,-alto/2,0);
glTexCoord2i(0,1);
glVertex3f(-ancho/2,alto/2,0);
glTexCoord2i(1,1);
glVertex3f(ancho/2,alto/2,0);
glTexCoord2i(1,0);
glVertex3f(ancho/2,-alto/2,0);
glEnd();
}
Si quito el códgo anterior en la función de dibujo y cargo dentro de la función otra función que tengo hecha para dibujar un polígono regular de n lados me lo pinta sin problema, por lo que la función de dibujo y el main funcionan a la perfección.
Los errores que da son 5:
Error 1 error C2227: left of '->sizeX' must point to class/struct/union/generic type c:\home\c20190\visual studio 2005\projects\prueba\prueba\generation_windows.cpp 441
Error 2 error C2227: left of '->sizeY' must point to class/struct/union/generic type c:\home\c20190\visual studio 2005\projects\prueba\prueba\generation_windows.cpp 441
Error 3 error C2227: left of '->data' must point to class/struct/union/generic type c:\home\c20190\visual studio 2005\projects\prueba\prueba\generation_windows.cpp 442
Error 4 error C2040: 'texture' : 'AUX_RGBImageRec *[1]' differs in levels of indirection from 'GLuint [1]' c:\home\c20190\visual studio 2005\projects\prueba\prueba\generation_windows.cpp 672
Error 5 error C2440: '=' : cannot convert from 'AUX_RGBImageRec *' to 'GLuint' c:\home\c20190\visual studio 2005\projects\prueba\prueba\generation_windows.cpp 699
¿Alguién me puede echar una mano? No sé que hacer
Un saludo,