2010-02-20 4 views
2

J'utilise C++ et OpenGL pour faire un jeu 2D de base, j'ai une image png avec des zones transparentes pour mon lecteur. Il fonctionne parfaitement sur mes ordinateurs portables et de laboratoire, mais sur mon bureau, l'image entière est la plus souvent vue, et pas seulement les zones qui doivent l'être. Qu'est-ce qui pourrait causer/réparer cela?OpenGL Texture Transparent

Voici le code que je l'ai utilisé et est le même sur toutes les machines

glPushMatrix(); 
glEnable(GL_TEXTURE_2D);  
glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glBindTexture(GL_TEXTURE_2D, playerTex); 
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 

glTranslatef(XPos, YPos, 0.0); 
glRotatef(heading, 0,0,1); 
    glBegin(GL_POLYGON); 
     glTexCoord2f(0.0, 1.0); glVertex2f(-40,40); 
     glTexCoord2f(0.0, 0.0); glVertex2f(-40,-40); 
     glTexCoord2f(1.0, 0.0); glVertex2f(40,-40); 
     glTexCoord2f(1.0, 1.0); glVertex2f(40,40); 
    glEnd(); 

glDisable(GL_BLEND); 
glDisable(GL_TEXTURE_2D); 
glPopMatrix(); 
+0

souhaite que je pourrais vous donner plus de upvotes .. :) votre code m'a sauvé .. :) –

Répondre

3

Je trouve le problème, je l'ai changé

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 

à

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

et il fonctionne correctement, ne sais pas pourquoi si.

+4

Parce que les mipmaps ne sont pas construits plus automatiquement? – Luca

+0

@LucaPiccioni: Yup, en combinaison avec différentes résolutions sur différents ordinateurs. – Macke

2

Est-ce réglage glColor4f (1,1,1,1) d'aide? (Je ne me souviens pas si GL_REPLACE est affecté par la couleur vertex)

Vérifiez glGetError() aux endroits appropriés pour voir si vous ne faites rien de vraiment faux.

Autres conseils génériques:

  • essayer de verrouiller toutes les extrémités libres de l'Etat rendent.
  • Assurez-vous que votre librairie PNG-read fonctionne correctement partout. (créer des données de texture dans le code sinon)
  • Cela peut être lié au matériel, puis il est utile de répertorier les OS: es et les types/pilotes de CPU.
  • Je suppose que vous exécutez le même exécutable sur tous les ordinateurs?
+0

GL_REPLACE signifie remplacer la couleur vertex (plus exactement, la sortie de l'étape précédente), donc non, cela ne l'affecte pas. – Bahbar

+0

J'ai essayé le glGetError() ne rien obtenir de ce OS: Win 7 32bit et vista laboratoire 64bit CPU: le bureau est Intel E6600, un autre core 2 duo sur un ordinateur portable graphique: sur le bureau ATI Radeon X1900, ordinateur portable Intel Integrated – Chris