IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

problème de texturage


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut problème de texturage
    J'utilise openGL/SDL pour faire de l'affichage 2d accéléré sous linux.

    Cela fonctionne de façon quasi-parfaite, sauf avec les drivers radéon libres sous ubuntu dapper (aucun prob avec les drivers proprios nvidia/ati). Les textures se trouvent entourées d'un trait noir.

    Pas de problème de bord noir lorsque je fait de la "3d pure".



    Le code en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glViewport(0, 0, this->GetWidth(), this->GetHeight());
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0f, GLdouble(this->GetWidth()), GLdouble(this->GetHeight()), 00f);
    // enable blending, should work like 2d sdl does
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    // enable anti-aliasing
    glEnable(GL_POINT_SMOOTH);
    glEnable(GL_LINE_SMOOTH);
    glMatrixMode(GL_MODELVIEW);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    if (surface->flags & SDL_OPENGL)
    {
    	ManageTexture();
    	glBegin(GL_QUADS);
    	glColor4f(1.0, 1.0, 1.0, 1.0);
    	glTexCoord2d(0, 0);
    	glVertex2i(x, y);
    	glTexCoord2d(0, hTexHeight);
    	glVertex2i(x, y + hSurface->h);
    	glTexCoord2d(hTexWidth, hTexHeight);
    	glVertex2i(x + hSurface->w, y + hSurface->h);
    	glTexCoord2d(hTexWidth, 0);
    	glVertex2i(x + hSurface->w, y);
    	glEnd();
    }
    .....
    void SDLgfx::ManageTexture()
    {
    	if (!hTextureIndex)
    	{
    		glGenTextures(1, &hTextureIndex);
    		hTextureStatus = TEX_TO_RELOAD;
    	}
     
    	glEnable(GL_TEXTURE_2D);
    	glBindTexture(GL_TEXTURE_2D, hTextureIndex);
     
    	if (hTextureStatus & TEX_TO_RELOAD)
    	{
    		#ifdef DEBUGGFX
    		std::cout << "Loading texture " << hTextureIndex << std::endl;
    		#endif
     
    		int w, h;
    		SDL_Surface *image;
    		Uint32 saved_flags;
    		Uint8  saved_alpha;
     
    		/* Use the surface width and height expanded to powers of 2 */
    		w = power_of_two(hSurface->w);
    		h = power_of_two(hSurface->h);
    		hTexWidth = GLdouble(hSurface->w) / w;  /* Max X */
    		hTexHeight = GLdouble(hSurface->h) / h;  /* Max Y */
     
    		image = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 32,
    #if SDL_BYTEORDER == SDL_LIL_ENDIAN /* OpenGL RGBA masks */
    			0x000000FF, 
    			0x0000FF00, 
    			0x00FF0000, 
    			0xFF000000
    #else
    			0xFF000000,
    			0x00FF0000, 
    			0x0000FF00, 
    			0x000000FF
    #endif
    			);
     
    		if ( image == NULL )
    			return;
     
    		/* Save the alpha blending attributes */
    		saved_flags = hSurface->flags & (SDL_SRCALPHA | SDL_RLEACCELOK);
    		saved_alpha = hSurface->format->alpha;
     
    		if ((saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA)
    			SDL_SetAlpha(hSurface, 0, 0);
     
    		/* Copy the surface into the GL texture image */
    		SDL_BlitSurface(hSurface, NULL, image, NULL);
     
    		/* Restore the alpha blending attributes */
    		if ((saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA )
    			SDL_SetAlpha(hSurface, saved_flags, saved_alpha);
     
    		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, 
    			GL_UNSIGNED_BYTE, image->pixels);
    		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
    		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
    		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
    		SDL_FreeSurface(image); /* No longer needed */
     
    		hTextureStatus = TEX_NONE;
    	}
    }
    Merci pour vos conseils.

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    Citation Envoyé par lordheavy
    Merci pour vos conseils.
    ho mais de rien, ca à été un vrai plaisir
    et sinon, c'est quoi la question ?
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut
    Citation Envoyé par bafman
    ho mais de rien, ca à été un vrai plaisir
    et sinon, c'est quoi la question ?
    Trop facile

    La question : "Ai-je oublié quelque chose dans mes différentes initialisations pouvant expliquer ce problème graphique ? Serait-ce un bogue ?"


    ++

  4. #4
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    a priori ca semble plus etre un probleme de driver que de code openGL...
    sinon essaye sans filtrage de texture pour voir avec un petit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 15
    Par défaut
    Bingo ! plus de problème

    Je vais tout de même faire un rapport de bogue.

    Merci

  6. #6
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    Citation Envoyé par lordheavy
    Merci
    Citation Envoyé par bafman
    ho mais de rien, ca à été un vrai plaisir
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Proble avec un vhosts sous Apache (Mandrake 10.1)
    Par __fabrice dans le forum Apache
    Réponses: 2
    Dernier message: 27/05/2005, 13h11
  2. Aide sur la RS 232
    Par Andr0 dans le forum C
    Réponses: 5
    Dernier message: 12/04/2005, 13h58
  3. Proble capture direct Show
    Par liliemumue dans le forum DirectX
    Réponses: 3
    Dernier message: 13/12/2004, 21h04
  4. gros problemes de texturages...
    Par aguion dans le forum OpenGL
    Réponses: 5
    Dernier message: 23/06/2004, 11h02
  5. ListView->Items->Clear() !!! Qques probl de perf
    Par Nicolas_a69 dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/08/2002, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo