#1 

16-03-2010 20:04:46

narugohan
Membres
Avatar de narugohan
Date d'inscription:
Messages: 113
IP: 81.53.235.240
Courriel

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


Hors ligne


#2 

17-03-2010 17:40:55

narugohan
Membres
Avatar de narugohan
Date d'inscription:
Messages: 113
IP: 90.25.217.53
Courriel

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("__3D_view_texture__", imageConteneur);
}


Utilisation de la fonction :

Code c++ :


char* cheminTexture[2];
         cheminTexture[0] = "texturePrincipale.jpg";
         cheminTexture[1] = "texture2.png";
         cheminTexture[2] = "texture3.png";
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


#3 

15-02-2011 16:49:39

thoced
Membres
Date d'inscription:
Messages: 65
IP: 91.179.169.13
Courriel

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é
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
167 invités en ligne
membre en ligne: -
RSS Feed