#0 

16-03-2010 21:04:46

narugohan
Abonné
Date d'inscription: 24-03-2009
Messages: 113

Bonjour à tous,
J'ai une légère petite question,
est t'il possible d'affiché une deuxieme texture sur mesh ??? je m'explique. Pour tester, j'utilise le ninja de irrlicht et j'ai prit la texture rouge, j'ai retravaillé l'image sous photoshop en ajoutant des lunettes au niveau de c'est yeux( c'est tout bête me direz-vous ), j'ai enlevé toute l'image sauf les lunettes, donc il reste plus que les lunettes, le tour ensuite est transparent, et se que je voudrai sa serai de pouvoir mettre la premier texture, celle de l'habit, et ensuite lui mettre une deuxieme texture, celle des lunettes par dessus en transparence pour que je puisse lui mette en gros des accessoires, sans etre obligé de rajouté des mesh, vous m'avez compris ???

J'ai déjà essayer cette méthode :

Code c++ :

node->setMaterialTexture(0, driver->getTexture("nskinrd.jpg"));
node->setMaterialTexture(1, driver->getTexture("nskinrd2.png"));


Mais rien n'a fonctionné, sa m'affiche que celle qui à le chiffre 0. Je comprend pas, et j'aimerai bien savoir car sa me sera d'une grande utilité pour rajouté de la pilosité ou des tatouage par exemple :p

je vous remercie d'avance pour vos réponse

Dernière modification par narugohan (16-03-2010 21:05:35)

Hors ligne


#1 

17-03-2010 18:40:55

narugohan
Abonné
Date d'inscription: 24-03-2009
Messages: 113

Bon, j'ai trouvé une solution, je vous la passe :

La fonction :

Code c++ :


irr::video::ITexture* textureSuperpose(irr::video::IVideoDriver* driver, int nbxTexture, char* image[])
{   
    irr::video::ITexture* texture[nbxTexture];
    irr::video::IImage* imageContenueSup[nbxTexture-1];
   
    for( int i=0; i<nbxTexture; i++)
         texture[i] = driver->getTexture(image[i]);
   
    irr::video::IImage* imageConteneur = driver->createImage(texture[0], irr::core::position2d<irr::s32>(0,0), texture[0]->getSize());

    for( int i=0; i<nbxTexture-1; i++)
         imageContenueSup[i] = driver->createImage(texture[i+1], irr::core::position2d<irr::s32>(0,0), texture[0]->getSize());

    for(int x = 0; x < texture[0]->getSize().Width; x++)
    {
        for(int y = 0; y < texture[0]->getSize().Height; y++)
        {
            irr::video::SColor pixel = imageConteneur->getPixel(x, y);
            irr::video::SColor pixelCont[nbxTexture-1];
           
            for( int i=0; i<nbxTexture-1; i++)
            {
                 pixelCont[i] = imageContenueSup[i]->getPixel(x, y);
                 if( pixelCont[i].getAlpha() != 0 )
                     imageConteneur->setPixel(x, y, imageContenueSup[i]->getPixel(x, y));
            }
           
        }
    }
    return driver->addTexture("nskinrd.jpg", imageConteneur);
}



Utilisation de la fonction :

Code c++ :


char* cheminTexture[2];
         cheminTexture[0] = "nskinrd.jpg";
         cheminTexture[1] = "nskinrd2.png";
         cheminTexture[2] = "__3D_view_texture__";
node->setMaterialTexture(0, textureSuperpose( driver, 3, cheminTexture));



Voilà, en espérent que sa aidera certaine personne ;p

PS : Je remerci ILovechocolat car c'est grâce à lui il m'a donné base pour faire mettre 1 texture en superposition et je les amélioré pour faire en sorte de pouvoir mettre plusieurs textures en superpostion, encore merçi à lui

Hors ligne


#2 

15-02-2011 17:49:39

thoced
Membre
Date d'inscription: 02-08-2010
Messages: 65

Bon je répond a un vieux post mais je pense que l'utilisation de shader sera nettement plus facile. (vertex et pixel shader)

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
137 invités en ligne
Aucun membre connecté
RSS Feed