Versuche mit DevIL texture atlas zu bauen
-
Hi, ich versuche mir einen Texture Atlas zu basteln und verwende dazu DevIL.
Leider klappen meine Versuche verschiedene files zusammenzubasteln nicht wie ich es mir wünsche. Habe Probleme mit dem Alpha Channel. Er wird offenbar auf das Bild gelegt und zudem erscheint er kopfüber.
Wäre super wenn sich jemand ein bisschen mit der lib auskennt und mir vielleicht ne Lösung vorschlagen kann.
Was ich als source einspeise und momentan erstelle
http://www.weown.de/files/misc/ILProblem.jpgUnd was ich gerne haette
http://www.weown.de/files/misc/WhatIWant.jpgHier die Quelledatei die ich verwende
http://www.weown.de/files/misc/BONUS_CRAB.TGARichtig verwirrt bin ich da ich eigendlich alle Parametern wie Pixel Format, Depth, etc. aus den QuellBilder übernehme und deswegen nicht weiss wo das Problem entsteht.
Ich verwende folgende Funktion um es prizipiell auszuprobieren. Allerdings rufe ich sie momentan der einfachheit halber mit 2x den gleichen Parametern auf.
void TextureManager::buildTextureAtlas(const char* fileA, const char* fileB){ //the handles for target and 2 sources ILuint target; ILuint src1; ILuint src2; //keep track about errors ILboolean success; //gen 3 tex ilGenImages(1, &target); ilGenImages(1, &src1); ilGenImages(1, &src2); //bind source 1 and load ilBindImage(src1); success = ilLoadImage(fileA); if(!success) return; //save width and height int w1 = ilGetInteger(IL_IMAGE_WIDTH); int h1 = ilGetInteger(IL_IMAGE_HEIGHT); //bind 2nd source and load ilBindImage(src2); success = ilLoadImage(fileB); if(!success){ ilDeleteImages(1, &src1); return; } //save second width int w2 = ilGetInteger(IL_IMAGE_WIDTH); int h2 = ilGetInteger(IL_IMAGE_HEIGHT); //use 2nd texture params for target (for now) ILint bpp = ilGetInteger(IL_IMAGE_BPP); ILint pf = ilGetInteger(IL_IMAGE_FORMAT); ILint depth = ilGetInteger(IL_IMAGE_DEPTH); ILint type = ilGetInteger(IL_IMAGE_TYPE); //extract filename only for test saving std::string identifier = fileA; identifier = identifier.substr(identifier.rfind("/")+1, identifier.rfind(".")-identifier.rfind("/")-1); std::string tar = identifier; tar.append("_Target.tga"); //bind target ilBindImage(target); //create with desired parameters ilTexImage(w1+w2,h1, depth, bpp, pf, type, 0); //ilOverlayImage(src1, 0, 0, 0); //ilOverlayImage(src2, w1, 0, 0); ilBlit(src1, 0,0,0,0,0,0,w1,h1,depth+1); ilBlit(src2, w1,0,0,0,0,0,w2,h2,depth+1); if (!success) return; ilEnable(IL_FILE_OVERWRITE); ilSaveImage(tar.c_str()); }
-
Das Problem steckt im IL src.
Wen es interessiert, hier der sourceforge.net Thread zum thema
https://sourceforge.net/forum/forum.php?thread_id=2717884&forum_id=13560