Explorar o código

USDZ Loader - texture scale + offset + rotation (#26861)

GitHubDragonFly hai 1 ano
pai
achega
f8863302d7
Modificáronse 1 ficheiros con 73 adicións e 0 borrados
  1. 73 0
      examples/jsm/loaders/USDZLoader.js

+ 73 - 0
examples/jsm/loaders/USDZLoader.js

@@ -13,6 +13,7 @@ import {
 	SRGBColorSpace,
 	SRGBColorSpace,
 	TextureLoader,
 	TextureLoader,
 	Object3D,
 	Object3D,
+	Vector2
 } from 'three';
 } from 'three';
 
 
 import * as fflate from '../libs/fflate.module.js';
 import * as fflate from '../libs/fflate.module.js';
@@ -489,6 +490,30 @@ class USDZLoader extends Loader {
 
 
 		}
 		}
 
 
+		function setTextureParams( map, data_value ) {
+
+			// rotation, scale and translation
+
+			if ( data_value[ 'float inputs:rotation' ] ) {
+
+				map.rotation = parseFloat( data_value[ 'float inputs:rotation' ] );
+
+			}
+
+			if ( data_value[ 'float2 inputs:scale' ] ) {
+
+				map.repeat = new Vector2().fromArray( JSON.parse( '[' + data_value[ 'float2 inputs:scale' ].replace( /[()]*/g, '' ) + ']' ) );
+
+			}
+
+			if ( data_value[ 'float2 inputs:translation' ] ) {
+
+				map.offset = new Vector2().fromArray( JSON.parse( '[' + data_value[ 'float2 inputs:translation' ].replace( /[()]*/g, '' ) + ']' ) );
+
+			}
+
+		}
+
 		function buildMaterial( data ) {
 		function buildMaterial( data ) {
 
 
 			const material = new MeshPhysicalMaterial();
 			const material = new MeshPhysicalMaterial();
@@ -507,6 +532,12 @@ class USDZLoader extends Loader {
 						material.map = buildTexture( sampler );
 						material.map = buildTexture( sampler );
 						material.map.colorSpace = SRGBColorSpace;
 						material.map.colorSpace = SRGBColorSpace;
 
 
+						if ( 'def Shader "Transform2d_diffuse"' in data ) {
+
+							setTextureParams( material.map, data[ 'def Shader "Transform2d_diffuse"' ] );
+
+						}
+
 					} else if ( 'color3f inputs:diffuseColor' in surface ) {
 					} else if ( 'color3f inputs:diffuseColor' in surface ) {
 
 
 						const color = surface[ 'color3f inputs:diffuseColor' ].replace( /[()]*/g, '' );
 						const color = surface[ 'color3f inputs:diffuseColor' ].replace( /[()]*/g, '' );
@@ -523,6 +554,12 @@ class USDZLoader extends Loader {
 						material.emissiveMap.colorSpace = SRGBColorSpace;
 						material.emissiveMap.colorSpace = SRGBColorSpace;
 						material.emissive.set( 0xffffff );
 						material.emissive.set( 0xffffff );
 
 
+						if ( 'def Shader "Transform2d_emissive"' in data ) {
+
+							setTextureParams( material.emissiveMap, data[ 'def Shader "Transform2d_emissive"' ] );
+
+						}
+
 					} else if ( 'color3f inputs:emissiveColor' in surface ) {
 					} else if ( 'color3f inputs:emissiveColor' in surface ) {
 
 
 						const color = surface[ 'color3f inputs:emissiveColor' ].replace( /[()]*/g, '' );
 						const color = surface[ 'color3f inputs:emissiveColor' ].replace( /[()]*/g, '' );
@@ -538,6 +575,12 @@ class USDZLoader extends Loader {
 						material.normalMap = buildTexture( sampler );
 						material.normalMap = buildTexture( sampler );
 						material.normalMap.colorSpace = NoColorSpace;
 						material.normalMap.colorSpace = NoColorSpace;
 
 
+						if ( 'def Shader "Transform2d_normal"' in data ) {
+
+							setTextureParams( material.normalMap, data[ 'def Shader "Transform2d_normal"' ] );
+
+						}
+
 					}
 					}
 
 
 					if ( 'float inputs:roughness.connect' in surface ) {
 					if ( 'float inputs:roughness.connect' in surface ) {
@@ -549,6 +592,12 @@ class USDZLoader extends Loader {
 						material.roughnessMap = buildTexture( sampler );
 						material.roughnessMap = buildTexture( sampler );
 						material.roughnessMap.colorSpace = NoColorSpace;
 						material.roughnessMap.colorSpace = NoColorSpace;
 
 
+						if ( 'def Shader "Transform2d_roughness"' in data ) {
+
+							setTextureParams( material.roughnessMap, data[ 'def Shader "Transform2d_roughness"' ] );
+
+						}
+
 					} else if ( 'float inputs:roughness' in surface ) {
 					} else if ( 'float inputs:roughness' in surface ) {
 
 
 						material.roughness = parseFloat( surface[ 'float inputs:roughness' ] );
 						material.roughness = parseFloat( surface[ 'float inputs:roughness' ] );
@@ -564,6 +613,12 @@ class USDZLoader extends Loader {
 						material.metalnessMap = buildTexture( sampler );
 						material.metalnessMap = buildTexture( sampler );
 						material.metalnessMap.colorSpace = NoColorSpace;
 						material.metalnessMap.colorSpace = NoColorSpace;
 
 
+						if ( 'def Shader "Transform2d_metallic"' in data ) {
+
+							setTextureParams( material.metalnessMap, data[ 'def Shader "Transform2d_metallic"' ] );
+
+						}
+
 					} else if ( 'float inputs:metallic' in surface ) {
 					} else if ( 'float inputs:metallic' in surface ) {
 
 
 						material.metalness = parseFloat( surface[ 'float inputs:metallic' ] );
 						material.metalness = parseFloat( surface[ 'float inputs:metallic' ] );
@@ -579,6 +634,12 @@ class USDZLoader extends Loader {
 						material.clearcoatMap = buildTexture( sampler );
 						material.clearcoatMap = buildTexture( sampler );
 						material.clearcoatMap.colorSpace = NoColorSpace;
 						material.clearcoatMap.colorSpace = NoColorSpace;
 
 
+						if ( 'def Shader "Transform2d_clearcoat"' in data ) {
+
+							setTextureParams( material.clearcoatMap, data[ 'def Shader "Transform2d_clearcoat"' ] );
+
+						}
+
 					} else  if ( 'float inputs:clearcoat' in surface ) {
 					} else  if ( 'float inputs:clearcoat' in surface ) {
 
 
 						material.clearcoat = parseFloat( surface[ 'float inputs:clearcoat' ] );
 						material.clearcoat = parseFloat( surface[ 'float inputs:clearcoat' ] );
@@ -594,6 +655,12 @@ class USDZLoader extends Loader {
 						material.clearcoatRoughnessMap = buildTexture( sampler );
 						material.clearcoatRoughnessMap = buildTexture( sampler );
 						material.clearcoatRoughnessMap.colorSpace = NoColorSpace;
 						material.clearcoatRoughnessMap.colorSpace = NoColorSpace;
 
 
+						if ( 'def Shader "Transform2d_clearcoatRoughness"' in data ) {
+
+							setTextureParams( material.clearcoatRoughnessMap, data[ 'def Shader "Transform2d_clearcoatRoughness"' ] );
+
+						}
+
 					} else if ( 'float inputs:clearcoatRoughness' in surface ) {
 					} else if ( 'float inputs:clearcoatRoughness' in surface ) {
 
 
 						material.clearcoatRoughness = parseFloat( surface[ 'float inputs:clearcoatRoughness' ] );
 						material.clearcoatRoughness = parseFloat( surface[ 'float inputs:clearcoatRoughness' ] );
@@ -614,6 +681,12 @@ class USDZLoader extends Loader {
 						material.aoMap = buildTexture( sampler );
 						material.aoMap = buildTexture( sampler );
 						material.aoMap.colorSpace = NoColorSpace;
 						material.aoMap.colorSpace = NoColorSpace;
 
 
+						if ( 'def Shader "Transform2d_occlusion"' in data ) {
+
+							setTextureParams( material.aoMap, data[ 'def Shader "Transform2d_occlusion"' ] );
+
+						}
+
 					}
 					}
 
 
 				}
 				}