begin process at 2012 05 29 12:59:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

OpenGL

 > 

Multi-texturing


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

Multi-texturing

mardi 12 avril 2005 à 22:05:37 | Multi-texturing

barraq

Voila j'affiche ma scene avec cette fonction :

void Terrain::Draw(VObject *CurrentObject)
{
    int  g_DetailScale = 128;

    //Texture 0
    glActiveTextureARB( GL_TEXTURE0_ARB );
    glEnableClientState( GL_TEXTURE_COORD_ARRAY );
    glEnable( GL_TEXTURE_2D );
    glBindTexture( GL_TEXTURE_2D, _Texture[0] );
    glTexCoordPointer( 2, GL_FLOAT, 0, CurrentObject->_TextureCoords );

    //Configure le blending des 2 textures
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
    glTexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 2);

    //Texture 0 dans TU 1
    glActiveTextureARB( GL_TEXTURE1_ARB );
    glBindTexture( GL_TEXTURE_2D, _Texture[1] );
    glEnable( GL_TEXTURE_2D );
    glMatrixMode(GL_TEXTURE);
    glLoadIdentity();
    glScalef((float)g_DetailScale, (float)g_DetailScale, 1);
    glTexCoordPointer( 2, GL_FLOAT, 0, CurrentObject->_TextureCoords );
    glMatrixMode(GL_MODELVIEW);

    //Affichage
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(3, GL_FLOAT, 0, CurrentObject->_Vertices);
    glDrawArrays( GL_TRIANGLES, 0, CurrentObject->_TriangleCount*3);

    //Désactive la TU 1
    glEnable(GL_TEXTURE_2D);
    glDisableClientState( GL_TEXTURE_COORD_ARRAY );
}

dans Texture[0] j'ai la grande texture de ma map, et dans texture[1] une petite qui sert a afficher les details.

L'ennui est que je n'arrive pas a avoir Deux echelle differente pour mes texture :(
tout est la l'echelle de la grande ou de la petite....

ya t'il une solution ?
mercredi 13 avril 2005 à 07:32:03 | Re : Multi-texturing

Pamaury

je vais peut-être dire une bétise mais il me semble que çà devrait marcher comme çà . Sinon tu n'as qu'à scaler les coordonnées de la texture comme çà tu aura deux échelle différente .
Je ne saisi pas très bien ce que tu veux faire avec deux échelle différente: prend deux texture qui se prêtent directement à ton porgramme sans avoir à les mettre à l'échelle .

A m a u r y
mercredi 13 avril 2005 à 09:18:23 | Re : Multi-texturing

barraq

Réponse acceptée !
En fait l'idee d'avoir plusieur taille de texture est que la premiere est ta texture général, que tu étire, et la deuxieme est une que tu repete a l'interieur de ton objet, une sorte de texture "grain" si tu veux.
Donc par exemple sur une grande map, cela permet d'avoir un effet vraiment réaliste ;)
je peu pas mettre de screen shot mais mon prog est bientot finis donc tu verras.

Mais j'ais trouvé la solution en fait aprés chaque

glActiveTextureARB( GL_TEXTURE1_ARB ); il faut mettre
glClientActiveTextureARB( GL_TEXTURE1_ARB );
pourquoi je ne c'est pas
si ya un boss en opengl par la sa serai le bien venu de savoir pourquoi

enfin voila la fonction de tracé :



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

    // Enable all client states being used.
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_NORMAL_ARRAY);

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

    //Set up multitexturing

    glActiveTextureARB( GL_TEXTURE0_ARB );
    glClientActiveTextureARB(GL_TEXTURE0_ARB);
    glEnableClientState( GL_TEXTURE_COORD_ARRAY );
    glTexCoordPointer(2, GL_FLOAT, 0, CurrentObject->_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()->_bDetail)
    {
        glActiveTextureARB( GL_TEXTURE1_ARB );
        glEnable( GL_TEXTURE_2D );
        glClientActiveTextureARB(GL_TEXTURE1_ARB);
        glEnableClientState( GL_TEXTURE_COORD_ARRAY );
        glTexCoordPointer(2, GL_FLOAT, 0, CurrentObject->_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

    glDrawArrays( GL_TRIANGLES, 0, CurrentObject->_TriangleCount*3);

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

    if(_GLCtrl->GetFlag()->_bDetail)
    {
        // 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()->_bLighting )
        glEnable(GL_LIGHTING);
}

mercredi 13 avril 2005 à 18:38:41 | Re : Multi-texturing

KeniiyK

Membre Club

Je sais pas si ca fait de moi un pro OpenGL, mais l'explication est que comme tu utilises les tableaux de sommets pour rendre ta géométrie (VertexArray), et bien il faut que "tout s'accordent" c-a-d les normales (NormalArray), les coords de texture (TextureCoordArray) et ensuite parce que tu utilises le multitexturing il faut bien une fonction pour preciser a quelle unité de texture s'applique le tableaux de coord texture precedement defini..., cette fonction est donc glClientActiveTextureARB( GL_TEXTUREi_ARB ); i=l'unité de texture.


Voilou, je sais pas si j'ai ete tres clair....

@+, KeniiyK

mercredi 13 avril 2005 à 19:09:28 | Re : Multi-texturing

Pamaury

je me disait bien aussi que c'était bizarre de pas activer chaque texture :) mais comme je programme pas tous les jour avec le multitexturing j'avais un peu oublié...

A m a u r y


Cette discussion est classée dans : gl, float, texture, 2d, currentobject


Répondre à ce message

Sujets en rapport avec ce message

erreur en opengl :( [ par intello2001 ] c:\documents and settings\administrator\mes documents\ogl3\ogl3\untitled1.o(.text+0x71f):untitled1.cpp: undefined reference to `auxDIBImageLoadA@4'c s AIDEZ MOI scp problème de texture bmp avec glaux [ par progundeath ] aidez moi svp g un big problème que j'arrive pas à résoudre mais bon je ne suis qu'un newbie d'autres le résoluront en 10 secondes enfin j'espère donc [Open GL]Afficher plusieurs images [ par goutbouyo ] Salut, c'est encore moi, désolé ...En fait c'est que je n'arrive pas à charger plusieurs images.J'utilise ça :Je charge une image :void LoadTexture() probleme pour texturer une sphere [ par mikey84 ] Bonjour! j'ai un énorme problème. J'ai essayé d'appliquer une texture sur ma sphère avec la librairie devil, avec opengl et glut et aucun n'a fonction TEXTURE SDL_IMAGE JPEG [ par Batman60 ] salutquelqu'un peut me dire ce qui cloche dans mon bout de code utilisé pour charger une texture jpeg j'utilise la lib SDL_IMAGE pour celaest-ce que c image non chargée [ par aurelivs ] bonjourje cherche a faire une appli en C++ et OpenGL pour charger une image et afficher cette image (puis la transformer). cependant je n'arrive pas à 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 Texture openGl [ par neodelphi ] Bonjour tout le monde, j'essaye désespérément d'ajouter des textures dans mon projet openGl, mais je devient fou... J'ai écrit une classe qui me perm problème de transparence sur texture opengl [ par Batman60 ] bonsoirla transparence sur la texture tga ne s'affiche pas, pourtant j'utilise le code ci-dessous et je ne vois pas quoi d'autre à ajouter ou modifier bitmap avec SDL_image? [ par Batman60 ] Bonjour Comment afficher des bitmaps correctement(bonnes couleurs,et image non inversée) avec ce code (SDL_ima


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 : 0,265 sec (4)

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