Pārlūkot izejas kodu

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 gadi atpakaļ
vecāks
revīzija
a593239613
1 mainītis faili ar 23 papildinājumiem un 2 dzēšanām
  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 );