Просмотр исходного кода

LODs: manage different order in materials in lods

lviguier 9 месяцев назад
Родитель
Сommit
7ad32a752d
1 измененных файлов с 9 добавлено и 1 удалено
  1. 9 1
      hxd/fmt/fbx/HMDOut.hx

+ 9 - 1
hxd/fmt/fbx/HMDOut.hx

@@ -10,6 +10,7 @@ class HMDOut extends BaseLibrary {
 	var dataOut : haxe.io.BytesOutput;
 	var filePath : String;
 	var tmp = haxe.io.Bytes.alloc(4);
+	var midsSortRemap : Map<Int, Int>;
 	public var absoluteTexturePath : Bool;
 	public var optimizeSkin = true;
 	public var generateNormals = false;
@@ -455,7 +456,7 @@ class HMDOut extends BaseLibrary {
 				if( mats == null )
 					mid = 0;
 				else {
-					mid = mats[matPos];
+					mid = midsSortRemap != null ? midsSortRemap.get(mats[matPos]) : mats[matPos];
 					if( mats.length > 1 ) matPos++;
 				}
 				var idx = ibufs[mid];
@@ -906,6 +907,13 @@ class HMDOut extends BaseLibrary {
 				model.skin = makeSkin(skin, o.skin);
 			}
 
+			// Reorder materials to unsure there are in the same order for lods
+			midsSortRemap = new Map<Int, Int>();
+			for (idx in 0...mids.length) {
+				midsSortRemap.set(idx, mids[idx]);
+				mids[idx] = idx;
+			}
+
 			var gdata = hgeom.get(g.getId());
 			if( gdata == null ) {
 				var geom =