DividingTextures完成的功能實(shí)際上還是處在Mesh合并過程的第二步:打包圖集
函數(shù)原型:
Dictionary<Atlas, List<int[]>> DividingTextures(Dictionary<Texture2D, List<int>> AllTextureOfSameShader, int AtlasSize, Shader AtlasShader)
返回值 :
以Atlas類為鍵值溉苛,List<int[]>為映射值的字典。于是返回的會(huì)有若干個(gè)圖集,且每個(gè)圖集將會(huì)有個(gè)List<int[]>映射,這個(gè)鏈表的每一項(xiàng)是int[]類型,可以看成是這個(gè)圖集中的每一個(gè)貼圖讼载,這個(gè)貼圖對應(yīng)一個(gè)int數(shù)組轿秧,代表這個(gè)貼圖所貼在的物體的索引的數(shù)組
參數(shù):
AllTextureOfSameShader : 一組shader相同的貼圖,以及到其所貼在的物體索引數(shù)組的映射
AtlasSize : 打包后的圖集的大小
AtlasShader : 這個(gè)圖集所使用的shader
函數(shù)功能 :
將shader相同的一組貼圖打包成一個(gè)或多個(gè)圖集并返回
算法
- 將參數(shù)AllTextureOfSameShader中的鍵值貼圖取出咨堤,按尺寸大小將其排序并存在SortedTextures中
- 建立bool數(shù)組TexturePacked菇篡,使用TexturePacked[i]表示貼圖i是否已經(jīng)被打包在某個(gè)圖集中
- 使用參數(shù)AtlasSize和AtlasShader新建一個(gè)空白圖集類Atlas,設(shè)為當(dāng)前圖集一喘,將當(dāng)前圖集加入返回值變量中
- 遍歷SortedTextures中的每一個(gè)貼圖驱还,直到其中的每個(gè)貼圖都已經(jīng)添加到了某個(gè)圖集中 {
?檢查當(dāng)前貼圖是否已經(jīng)被打包過,若是凸克,跳過當(dāng)前循環(huán)
?檢查當(dāng)前貼圖是否能添加入當(dāng)前圖集:
???若能议蟆,將其加入且設(shè)置TexturePacked[i]為true,將這貼圖對應(yīng)的物體索引數(shù)組加入返回值變量中萎战;
???若不能咐容,說明當(dāng)前圖集已滿,使用參數(shù)AtlasSize和AtlasShader新建一個(gè)空白圖集類Atlas蚂维,設(shè)為當(dāng)前圖集疟丙,將當(dāng)前圖集加入返回值變量中
?
} - 返回結(jié)果