Historique des modifications - Message

Message #11790

Sujet: Changer la coloration de la texture d'une skybox


Type Date Auteur Contenu
Création du message 07-05-2017 10:33:00 Magun
voila un premier example avec un effet sepia

Code c++ :

  irr::core::array<irr::video::ITexture*> skybox;
  skybox.push_back(driver->getTexture(mediaPath + "irrlicht2_up.jpg"));
  skybox.push_back(driver->getTexture(mediaPath + "irrlicht2_dn.jpg"));
  skybox.push_back(driver->getTexture(mediaPath + "irrlicht2_lf.jpg"));
  skybox.push_back(driver->getTexture(mediaPath + "irrlicht2_rt.jpg"));
  skybox.push_back(driver->getTexture(mediaPath + "irrlicht2_ft.jpg"));
  skybox.push_back(driver->getTexture(mediaPath + "irrlicht2_bk.jpg"));
  
  float sepia = 0.8f;
  
  for(unsigned i = 0; i<skybox.size(); ++i)
  {
      irr::video::SColor color;
      unsigned char *buffer = (unsigned char*)skybox[i]->lock();
      
      u32 pitch = skybox[i]->getPitch();
      u32 bytes = video::IImage::getBitsPerPixelFromFormat(skybox[i]->getColorFormat()) / 8;
      
      for(unsigned x = 0; x<skybox[i]->getSize().Width; ++x)
      {
          for(unsigned y = 0; y<skybox[i]->getSize().Height; ++y)
          {
              unsigned char *dst = buffer + (y * pitch) + (x * bytes);
              color.setData(dst, skybox[i]->getColorFormat());
              
              float r = color.getRed() / 255.f;
              float g = color.getGreen() / 255.f;
              float b = color.getBlue() / 255.f;
              
              float rsepia = r * 0.393 + g * 0.769 + b * 0.189;
              float gsepia = r * 0.349 + g * 0.686 + b * 0.168;
              float bsepia = r * 0.272 + g * 0.534 + b * 0.131;
              
              r = sepia*r + (1.0-sepia)*rsepia;
              g = sepia*g + (1.0-sepia)*gsepia;
              b = sepia*g + (1.0-sepia)*bsepia;
              
              color.setRed(std::min(r * 225.f, 255.f));
              color.setGreen(std::min(g * 225.f, 255.f));
              color.setBlue(std::min(b * 225.f, 255.f));
              
              color.getData(dst, skybox[i]->getColorFormat());
          }
      }
      
      skybox[i]->unlock();
  }

	smgr->addSkyBoxSceneNode(
      skybox[0], skybox[1],
      skybox[2], skybox[3],
      skybox[4], skybox[5]
  );

Retour

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
244 invités en ligne
membre en ligne: -
RSS Feed