Quellcode durchsuchen

Made gltf skin.inverseBindMatrices optional as per spec.

Mark Sibly vor 7 Jahren
Ursprung
Commit
82a06d7817
2 geänderte Dateien mit 19 neuen und 9 gelöschten Zeilen
  1. 4 1
      modules/mojo3d/loader/gltf2.monkey2
  2. 15 8
      modules/mojo3d/loader/gltf2loader.monkey2

+ 4 - 1
modules/mojo3d/loader/gltf2.monkey2

@@ -501,7 +501,10 @@ Class Gltf2Asset
 			Local skin:=New Gltf2Skin
 			skins[i]=skin
 			
-			skin.inverseBindMatrices=accessors[jskin.GetNumber( "inverseBindMatrices" )]
+			If jskin.Contains( "inverseBindMatrices" )
+				
+				skin.inverseBindMatrices=accessors[jskin.GetNumber( "inverseBindMatrices" )]
+			Endif
 			
 			If jskin.Contains( "skeleton" )
 				

+ 15 - 8
modules/mojo3d/loader/gltf2loader.monkey2

@@ -624,13 +624,20 @@ Class Gltf2Loader
 		
 		Local skin:=_asset.skins[0]
 		
-		Local datap:=GetData( skin.inverseBindMatrices )
-		Local stride:=skin.inverseBindMatrices.bufferView.byteStride ?Else 64
-		Local n:=skin.inverseBindMatrices.count
+		Local n:=skin.joints.Length
 		
-		If n<>skin.joints.Length
-			Print "Invalid skin"
-			Return
+		Local datap:UByte Ptr,stride:Int
+		
+		If skin.inverseBindMatrices
+			
+			If skin.inverseBindMatrices.count<>n
+				Print "Invalid skin"
+				Return
+			Endif
+			
+			datap=GetData( skin.inverseBindMatrices )
+			stride=skin.inverseBindMatrices.bufferView.byteStride ?Else 64
+			
 		Endif
 		
 		_bones=New Model.Bone[n]
@@ -640,12 +647,12 @@ Class Gltf2Loader
 		For Local i:=0 Until n
 			
 			Local entity:=_entities[ _nodeIds[skin.joints[i]] ]
-			Local matrix:=FlipMatrix( Cast<Mat4f Ptr>( datap )[0] )
+			Local matrix:=datap ? FlipMatrix( Cast<Mat4f Ptr>( datap )[0] ) Else New Mat4f
 			
 			_bones[i].entity=entity
 			_bones[i].offset=New AffineMat4f( matrix )
 			
-			datap+=stride
+			If datap datap+=stride
 		Next
 	End