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

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 лет назад
Родитель
Сommit
a593239613
1 измененных файлов с 23 добавлено и 2 удалено
  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 );