Question

Voici la chose: je veux charger une image comme un arrière-plan rempli dans l'ensemble de la fenêtre. Cet arrière-plan devrait toujours faire face à la caméra, peu importe où la caméra face à. D'abord, je pense naturellement utiliser une texture comme fond, mon code est ci-dessous:

glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0,1,0,1,0,1);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();

glBindTexture(GL_TEXTURE_2D, myimage.GetID());
glEnable(GL_TEXTURE_2D);

glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2f(0, 0);
glTexCoord2f(1, 0); glVertex2f(1, 0);
glTexCoord2f(1, 1); glVertex2f(1, 1);
glTexCoord2f(0, 1); glVertex2f(0, 1);
glEnd();

glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);

Croyez-moi, MyImage est une classe Cimage qui peut charger des photos dans des textures, cela fonctionne bien. Cependant, pour une raison inconnue, mon application ne peut pas charger une texture dans un rectangle. (J'ai décrit ce problème ici ici Cliquez sur ) en conséquence, je seulement peut voir un cadre rectangle autour de ma fenêtre.

Alors, je trouve une autre solution.

J'utilise les Gldrawpixels au lieu d'une texture. Mon code est ci-dessous:

glRasterPos2i(0, 0);
glDrawPixels(myimage.GetWidth(), myimage.GetHeight(), (myimage.GetBPP() == 24)?GL_RGB:GL_RGBA, GL_UNSIGNED_BYTE, 
    myimage.GetData());

La photo est apparue! Cependant, la photo n'a pas toujours été confrontée à mon appareil photo. Il apparaît seulement dans une direction particulière. Vous savez, comme un objet dans la scène, mais pas un arrière-plan toujours face à la caméra.

Donc, quiconque sait utiliser les GLDRAWPIXELLS pour mettre en œuvre un fond?

Au fait, je pense que ce fond n'est pas un objet placé dans la scène 3D. Alors les panneaux d'affichage peuvent ne pas être ma solution. Encore une fois, ce fond rempli dans tout le port d'affichage et toujours face à la caméra.

Était-ce utile?

La solution

L'une des raisons pour lesquelles votre chargement de texture pourrait ne pas fonctionner est dû au fait qu'il pourrait ne pas avoir de dimensions de puissance de deux.Essayez une texture carrée 256x256 (ou similaire) pour voir si c'est le problème.Regardez ici pour plus d'informations sur Textures Rectangle .

revenir à votre problème de fond - la bonne façon de le faire serait de

  1. Configurez une projection orthographique / visualisation qui remplit tout l'écran.

    glViewport(0,0,nw,nh);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0,1,0,1,0,1);
    glMatrixMode(GL_MODELVIEW);
    
  2. Désactiver le test de profondeur

  3. Dessinez le quad à écran complet avec le rectangle de texture / texture que vous avez chargé.

    glBegin(GL_QUADS);
    glVertex2f(0,0);
    glVertex2f(1,0);
    glVertex2f(1,1);
    glVertex2f(0,1);
    glEnd();
    
  4. Configurez votre projection / modèle régulier et continuer.

  5. J'espère que cela vous aidera!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top