begin process at 2012 05 28 17:39:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

OpenGL

 > 

BMP Transparante


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

BMP Transparante

samedi 7 mai 2005 à 19:20:19 | BMP Transparante

barraq

Voila j'ai un petit soucis de transparance avec les images BMP
J'afficher mes arbres en utilisant le format TGA, mais la transparance ne semble marcher que pour les images 32Bit !!! sa rame trop donc je veux pas.
J'ai donc choisis d'utiliser deux images BMP,  et voici le code :

void CreateListTree(UINT TextureTree, UINT MaskTexture, GLuint index)
{
    glNewList(index,GL_COMPILE);
    {

        //glDisable(GL_DEPTH_TEST);
        glDisable(GL_CULL_FACE);            // Turn off back face culling
        glBlendFunc(GL_DST_COLOR, GL_ZERO); // Blend Screen Color With Zero (Black)
        glEnable(GL_TEXTURE_2D);
        glEnable(GL_BLEND);

        // Mask
        glBindTexture(GL_TEXTURE_2D, MaskTexture);
        glBegin(GL_QUADS);
              glTexCoord2f(0,0);
            glVertex3f(-2,0,0);
              glTexCoord2f(1,0);
            glVertex3f(2,0,0);
              glTexCoord2f(1,1);
            glVertex3f(2,4,0);
              glTexCoord2f(0,1);
            glVertex3f(-2,4,0);

              glTexCoord2f(0,0);
            glVertex3f(0,0,-2);
              glTexCoord2f(1,0);
            glVertex3f(0,0,2);
              glTexCoord2f(1,1);
            glVertex3f(0,4,2);
              glTexCoord2f(0,1);
            glVertex3f(0,4,-2);
        glEnd();

        // Texture
        glBlendFunc(GL_ONE, GL_ONE);
        glBindTexture(GL_TEXTURE_2D, TextureTree);
        glBegin(GL_QUADS);
              glTexCoord2f(0,0);
            glVertex3f(-2,0,0);
              glTexCoord2f(1,0);
            glVertex3f(2,0,0);
              glTexCoord2f(1,1);
            glVertex3f(2,4,0);
              glTexCoord2f(0,1);
            glVertex3f(-2,4,0);

              glTexCoord2f(0,0);
            glVertex3f(0,0,-2);
              glTexCoord2f(1,0);
            glVertex3f(0,0,2);
              glTexCoord2f(1,1);
            glVertex3f(0,4,2);
              glTexCoord2f(0,1);
            glVertex3f(0,4,-2);
        glEnd();

        glDisable( GL_BLEND );            // Turn off blending
        glEnable(GL_CULL_FACE);            // Turn on back face culling
        glDisable(GL_TEXTURE_2D);        // Turn on texture mapping if it's not already
        //glEnable(GL_DEPTH_TEST);

    }
    glEndList();
}

le truc c'est que les arbre sont tous noir  !!!!
remarquez que si juncommente glEnable(GL_DEPH_TEST) rien ne s'affiche du tout !!
mais voila se que j'obtien :


quelquun a une idée ?
merci bien

barraq

lundi 9 mai 2005 à 20:05:04 | Re : BMP Transparante

KeniiyK

Membre Club

Salut Barraq !!!, commence a avoir de la gueule ton soft !!! Félicitation !!!.

Pour la transparence, j'ai deja utilisé du RGBA avec du TGA et ca marche donc chope peut etre un autre loader....

Pour l'histoire des BMP j'ai pas trop compris comment tu les melanges (j'ai regarde vite fait... j'ai plus le tps de rien faire....) on dirai que tu fais du multi-texturing en dessinant 2 fois le meme objet...., mais au sinon, si tu as les arbres noirs ,cela peut etre un probleme de couleur ou une mauvaise fonction de blending ou les deux.

Désolé, j'ai pas mon book d'OpenGL sous la main... il est au boulot....

KeniiyK

lundi 9 mai 2005 à 20:07:54 | Re : BMP Transparante

KeniiyK

Membre Club

Au fait si tu veux faire un truc du style BMP1 ==RGB et BMP2==Alpha, tu peux toujours reconstitue ton image RGBA dans le code.....

KeniiyK

lundi 9 mai 2005 à 21:49:07 | Re : BMP Transparante

barraq

Merci bien pour le compliement

sinon pour les BMPs sa avance un petit peu, le noir vient du fait que le system de double couche de BMP de marche pas avec le multi-texturing... donc j'ai placé a dessiner les arbres aprés l'affichage de la map et sa allé déja mieux, ensuite j'affiche le skybox avant car la couleur noir semblait venir du fait que le fond de mon écran est noir avant que j'affiche mon skybox.

Mais cela n'empeche pas que je n'est pas le meme résultat que avec TGA....
mais meme si je change de loader 32bit sa rest HUGE pour une texture....
Enfin la dead line c dans 3 jours, donc je vais implementer les deux versions.
Si je trouve la solution je la posterais ici.

Et bientot toutes les sources de mon code seront mis en ligne, mais faut que j'attend mon examination avant ...
pensez a moi c'est en anglais

Et toi sa marche le boulot ?

See ya

mercredi 11 mai 2005 à 20:44:38 | Re : BMP Transparante

KeniiyK

Membre Club

Alors ?, t'as trouve ton erreur ?

Figure toi que pas plus tard qu'hier j'ai eu la meme erreur d'affichage... maintenant, a savoir si c'est la meme que toi...
J'affichais mon terrain en multitexturing puis apres quelques objets et ceux qui utilisaient une texture etaient tout noir.... L'erreur c'est que je ne désactivais pas totalement/correctement les étages de textures apres le rendu du terrain et SURTOUT il faut toujours active le premier etage de texture en sortie... (il me semble que je te l'avais dis... en voici la preuve ...).

Sinon coté boulot c'est impec'... rien à dire... OpenGL / C++ ... ambiance sympa ... c la fete...

KeniiyK

jeudi 12 mai 2005 à 00:21:59 | Re : BMP Transparante

barraq

Hum donc mon erreur sa doit venir de la meme chose...
Pour afficher un block de mon octree je procede comme cela

bool Terrain::DrawObject(VObject *CurrentObject)
{
    int  g_DetailScale = 128;

    if( _Flag->rCanDraw() && CurrentObject != NULL )
    {
        // Enable all client states being used.
        glEnableClientState(GL_VERTEX_ARRAY);

        glVertexPointer(3, GL_FLOAT, 0, _CObject->_Vertices);

        ////Set up multitexturing

        glActiveTextureARB( GL_TEXTURE0_ARB );
        glClientActiveTextureARB(GL_TEXTURE0_ARB);
        glEnableClientState( GL_TEXTURE_COORD_ARRAY );
        glTexCoordPointer(2, GL_FLOAT, 0, _CObject->_TextureCoords);
        glBindTexture( GL_TEXTURE_2D, _Texture[1]);

        glEnable( GL_TEXTURE_2D );
        glBindTexture( GL_TEXTURE_2D, _Texture[0]);

        // If detail texturing is required, render the second texture
        if( _GLCtrl->GetFlag()->rDetail() )
        {
            glActiveTextureARB( GL_TEXTURE1_ARB );
            glEnable( GL_TEXTURE_2D );
            glClientActiveTextureARB(GL_TEXTURE1_ARB);
            glEnableClientState( GL_TEXTURE_COORD_ARRAY );
            glTexCoordPointer(2, GL_FLOAT, 0, _CObject->_TextureCoords);

            // Now we want to enter the texture matrix. This will allow us
            // to change the tiling of the detail texture.
            glMatrixMode(GL_TEXTURE);

            // Reset the current matrix and apply our chosen scale value
            glLoadIdentity();
            glScalef((float)g_DetailScale, (float)g_DetailScale, 1);

            // Leave the texture matrix and set us back in the model view matrix
            glMatrixMode(GL_MODELVIEW);

            glBindTexture( GL_TEXTURE_2D, _Texture[1]);

            glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
            glTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 2);
        }

        // Render
        glDrawElements(GL_TRIANGLES, CurrentObject->_NumberOfVertices, GL_UNSIGNED_INT, CurrentObject->_VectMapIndices);
        //glDrawElements(GL_TRIANGLES, _CObject->_NumberOfVertices, GL_UNSIGNED_INT, _CObject->_VectMapIndices);

        //// Disable all the client states we enabled.
        glDisableClientState(GL_VERTEX_ARRAY);
        glDisableClientState(GL_TEXTURE_COORD_ARRAY);

        if( _GLCtrl->GetFlag()->rDetail() )
        {
            // Disable the 2nd texture
            glActiveTextureARB(GL_TEXTURE1_ARB);
            glDisable(GL_TEXTURE_2D);

            // Switch back to the first texture
            glActiveTextureARB( GL_TEXTURE0_ARB );
            glClientActiveTextureARB(GL_TEXTURE0_ARB);
        }

        if( _GLCtrl->GetFlag()->rLighting() )
            glEnable(GL_LIGHTING);

        return true;
    }

    return false;
}

Je pense tout fermer ce que tu as dis non ?

Bien dla chance pour ton job, moi je me prend la tête comme un taré pour mon rapport !!
je crois que je v me planter le niveau est trop haut pour mon pauvre petit niveau d'anglais

A plus

jeudi 12 mai 2005 à 09:50:00 | Re : BMP Transparante

KeniiyK

Membre Club

Ben voila mon code de rendu du terrain :

// activation de l'unite de texture 0
 glActiveTextureARB(GL_TEXTURE0_ARB);
 glEnable(GL_TEXTURE_2D);
 glBindTexture(GL_TEXTURE_2D,_textureNames[0]);
 glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);

// activation de l'unite de texture 1
 glActiveTextureARB(GL_TEXTURE1_ARB);
 glEnable(GL_TEXTURE_2D);
 glBindTexture(GL_TEXTURE_2D,_textureNames[1]);
 glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);

// coords de  l'unite de texture 0
 glClientActiveTextureARB(GL_TEXTURE0_ARB); 
 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 glTexCoordPointer(2,GL_FLOAT,0,_texCoordArrayUnit0); 

// coords de  l'unite de texture 1
 glClientActiveTextureARB(GL_TEXTURE1_ARB); 
 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 glTexCoordPointer(2,GL_FLOAT,0,_texCoordArrayUnit1); 

 // activation des differents tableaux
 glEnableClientState(GL_COLOR_ARRAY);
 glEnableClientState(GL_NORMAL_ARRAY);
 glEnableClientState(GL_VERTEX_ARRAY);

// les tableaux....
 glColorPointer(4,GL_FLOAT,0,_colorArray);
 glNormalPointer(GL_FLOAT,0,_normalArray);
 glVertexPointer(3,GL_FLOAT,0,_vertexArray);

// on dessine
 glDrawArrays(GL_TRIANGLES,0,3*_numFaces);

// disable des tableaux
 glDisableClientState(GL_COLOR_ARRAY);
 glDisableClientState(GL_NORMAL_ARRAY);
 glDisableClientState(GL_VERTEX_ARRAY);

// disable coord unit 1
 glClientActiveTextureARB(GL_TEXTURE1_ARB);
 glDisableClientState(GL_TEXTURE_COORD_ARRAY);

// disable coord unit 0 
glClientActiveTextureARB(GL_TEXTURE0_ARB);
 glDisableClientState(GL_TEXTURE_COORD_ARRAY);

// disable unit 1
 glActiveTextureARB(GL_TEXTURE1_ARB);
 glDisable(GL_TEXTURE_2D);

// disable  unit 0 
glActiveTextureARB(GL_TEXTURE0_ARB);
 glDisable(GL_TEXTURE_2D);

Et voila...., maintenant que j'ai poste je remarque qu'il y a peut etre des appels inutiles, mais ca marche...

Bonne chance pour ton rapport et ta soutenance !!

KeniiyK



Cette discussion est classée dans : glvertex3f, glenable, gl, texture, gltexcoord2f


Répondre à ce message

Sujets en rapport avec ce message

OPENGL TEXTURE BMP [ par Batman60 ] bonjourvoici mon code compilé sur dev-cppc'est un cube tournant 3D affichant un bmp sur les six facesje voudrais texturer plusieurs bmp sur les six fa probleme de texture pour creer une explosion [ par elfiosi ] Bonjour a tous,Jai un probleme de texture lorsque jessaie de creer une explosion pour un jeu video. jutilise une image qui represente une etincelle av CLASSE SDL JPEG (OPENGL) [ par Batman60 ] au secours je n'arrive pas à afficher la texture voulue sur les faces choisie du cubeLE CLASSE .H: class Csdl{    public:     Csdl();&n transparence en OpenGl [ par F0ra ] Bonjour, J'ai un problème en OpenGl Je voudrais rendre uniquement la couleur rose< capture d'écran et plaquage sur un quad [ par Fr33z ] Bonjour à tous. Après avoir bien cherché sur internet divers tutoriaux, aides, et manuels, je n'ai toujours pas compris comment a partir d'un écran, Problème de placage de texture [ par unrealgun ] Bonjour,Je suis en train de développer uGUI en C++ sous linux avec SDL et OpenGL.Voila mon probleme : je charge une image PNG transparente avec SDL_Im Offscreen texture rendering to bitmap [ par S3rialHoOK3rs ] Bonjour, J'essaie de créer un rendu hors écran au sein de mon application OpenGL. Pour ce faire, je stock mon rendu offscreen dans une texture que je QT sous Visual C++ 2008 : SOUS XP [ par controlleur ] Bonjour j'ai rencontré une erreur l'or de l'exécution de mon programme : l'erreur c'est qu'il me dise que les QComboBox et QSlider que j'ai déclar OpenGL; transparence des png assombrie [ par choucroute987 ] Bonjour, Je me permet de poster dans la section C étant donné que l'OpenGl est peut utilisé avec d'autres langages... Je suis en train de développer


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,480 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales