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]
);