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.jpg

    Und was ich gerne haette
    http://www.weown.de/files/misc/WhatIWant.jpg

    Hier die Quelledatei die ich verwende
    http://www.weown.de/files/misc/BONUS_CRAB.TGA

    Richtig 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


Anmelden zum Antworten