Browse Source

Merge pull request #14451 from 06wj/patch0

GLTFLoader: Update KHR_lights_punctual and fix light has no color bug
Mr.doob 7 years ago
parent
commit
33c5c3df92

+ 1 - 1
docs/examples/loaders/GLTFLoader.html

@@ -31,7 +31,7 @@
 			<li>KHR_draco_mesh_compression</li>
 			<li>KHR_materials_pbrSpecularGlossiness</li>
 			<li>KHR_materials_unlit</li>
-			<li>KHR_lights (experimental)</li>
+			<li>KHR_lights_punctual (experimental)</li>
 		</ul>
 
 		<h2>Example</h2>

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

@@ -130,7 +130,7 @@ THREE.GLTFLoader = ( function () {
 
 					switch ( extensionName ) {
 
-						case EXTENSIONS.KHR_LIGHTS:
+						case EXTENSIONS.KHR_LIGHTS_PUNCTUAL:
 							extensions[ extensionName ] = new GLTFLightsExtension( json );
 							break;
 
@@ -237,7 +237,7 @@ THREE.GLTFLoader = ( function () {
 	var EXTENSIONS = {
 		KHR_BINARY_GLTF: 'KHR_binary_glTF',
 		KHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',
-		KHR_LIGHTS: 'KHR_lights',
+		KHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',
 		KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',
 		KHR_MATERIALS_UNLIT: 'KHR_materials_unlit',
 		MSFT_TEXTURE_DDS: 'MSFT_texture_dds'
@@ -270,11 +270,11 @@ THREE.GLTFLoader = ( function () {
 	 */
 	function GLTFLightsExtension( json ) {
 
-		this.name = EXTENSIONS.KHR_LIGHTS;
+		this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;
 
 		this.lights = {};
 
-		var extension = ( json.extensions && json.extensions[ EXTENSIONS.KHR_LIGHTS ] ) || {};
+		var extension = ( json.extensions && json.extensions[ EXTENSIONS.KHR_LIGHTS_PUNCTUAL ] ) || {};
 		var lights = extension.lights || {};
 
 		for ( var lightId in lights ) {
@@ -282,7 +282,16 @@ THREE.GLTFLoader = ( function () {
 			var light = lights[ lightId ];
 			var lightNode;
 
-			var color = new THREE.Color().fromArray( light.color );
+			// the color default value is [1, 1, 1]
+			var color = new THREE.Color( 0xffffff );
+			if ( light.color !== undefined ) {
+				color.fromArray( light.color )
+			}
+
+			var range = 0;
+			if ( light.range !== undefined ) {
+				range = light.range;
+			}
 
 			switch ( light.type ) {
 
@@ -294,10 +303,12 @@ THREE.GLTFLoader = ( function () {
 
 				case 'point':
 					lightNode = new THREE.PointLight( color );
+					lightNode.distance = range;
 					break;
 
 				case 'spot':
 					lightNode = new THREE.SpotLight( color );
+					lightNode.distance = range;
 					// Handle spotlight properties.
 					light.spot = light.spot || {};
 					light.spot.innerConeAngle = light.spot.innerConeAngle !== undefined ? light.spot.innerConeAngle : 0;
@@ -308,10 +319,6 @@ THREE.GLTFLoader = ( function () {
 					lightNode.add( lightNode.target );
 					break;
 
-				case 'ambient':
-					lightNode = new THREE.AmbientLight( color );
-					break;
-
 			}
 
 			if ( lightNode ) {
@@ -2956,11 +2963,11 @@ THREE.GLTFLoader = ( function () {
 				node = dependencies.cameras[ nodeDef.camera ];
 
 			} else if ( nodeDef.extensions
-					 && nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS ]
-					 && nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) {
+					 && nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS_PUNCTUAL ]
+					 && nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS_PUNCTUAL ].light !== undefined ) {
 
-				var lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights;
-				node = lights[ nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light ];
+				var lights = extensions[ EXTENSIONS.KHR_LIGHTS_PUNCTUAL ].lights;
+				node = lights[ nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS_PUNCTUAL ].light ];
 
 			} else {
 
@@ -3120,16 +3127,6 @@ THREE.GLTFLoader = ( function () {
 
 				}
 
-				// Ambient lighting, if present, is always attached to the scene root.
-				if ( sceneDef.extensions
-						 && sceneDef.extensions[ EXTENSIONS.KHR_LIGHTS ]
-						 && sceneDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) {
-
-					var lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights;
-					scene.add( lights[ sceneDef.extensions[ EXTENSIONS.KHR_LIGHTS ].light ] );
-
-				}
-
 				return scene;
 
 			} );

+ 6 - 6
examples/models/gltf/monster/glTF-lights/Monster.gltf

@@ -1,6 +1,6 @@
 {
     "asset": {
-        "generator": "COLLADA2GLTF with manual modifications for KHR_lights",
+        "generator": "COLLADA2GLTF with manual modifications for KHR_lights_punctual",
         "version": "2.0"
     },
     "scene": 0,
@@ -727,7 +727,7 @@
         },
         {
             "extensions": {
-                "KHR_lights": {
+                "KHR_lights_punctual": {
                     "light": 0
                 }
             },
@@ -735,7 +735,7 @@
         },
         {
             "extensions": {
-                "KHR_lights": {
+                "KHR_lights_punctual": {
                     "light": 1
                 }
             },
@@ -761,7 +761,7 @@
         },
         {
             "extensions": {
-                "KHR_lights": {
+                "KHR_lights_punctual": {
                     "light": 2
                 }
             },
@@ -4523,10 +4523,10 @@
         }
     ],
     "extensionsUsed": [
-        "KHR_lights"
+        "KHR_lights_punctual"
     ],
     "extensions": {
-        "KHR_lights": {
+        "KHR_lights_punctual": {
             "lights": [
                 {
                     "type": "point",