none
Problemilla sobre textura openGL VSC++ RRS feed

  • Pregunta

  • 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,




    miércoles, 17 de febrero de 2010 10:14

Todas las respuestas

  • Es muy fácil: el compilador no puede ver el array texture desde dentro de esa función. Podrías meterlo todo dentro de una clase o bien pasarle a Draw un puntero o referencia a texture.
    Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/
    miércoles, 17 de febrero de 2010 10:24
    Moderador
  • Solucionado. Muchas gracias por la ayuda.

    Un saludo
    viernes, 19 de febrero de 2010 12:20