Przeglądaj źródła

Implement support for unsigned normalized values as well

Since TypedArray objects don't have an easy way to figure out if they
are signed or unsigned, just switch on the type of the array instead.
Arseny Kapoulkine 6 lat temu
rodzic
commit
a593239613
1 zmienionych plików z 23 dodań i 2 usunięć
  1. 23 2
      examples/js/loaders/GLTFLoader.js

+ 23 - 2
examples/js/loaders/GLTFLoader.js

@@ -2873,8 +2873,29 @@ THREE.GLTFLoader = ( function () {
 
 				if ( outputAccessor.normalized ) {
 
-					var bits = outputAccessor.array.BYTES_PER_ELEMENT * 8;
-					var scale = 1 / ((1 << (bits - 1)) - 1);
+					var scale;
+
+					if ( outputArray.constructor === Int8Array ) {
+
+						scale = 1 / 127;
+
+					} else if ( outputArray.constructor === Uint8Array ) {
+
+						scale = 1 / 255;
+
+					} else if ( outputArray.constructor == Int16Array ) {
+
+						scale = 1 / 32767;
+
+					} else if ( outputArray.constructor === Uint16Array ) {
+
+						scale = 1 / 65535;
+
+					} else {
+
+						throw new Error( 'THREE.GLTFLoader: Unsupported output accessor component type.' );
+
+					}
 
 					var scaled = new Float32Array( outputArray.length );