提交 354c8f62 编写于 作者: M Mr.doob

Updated builds

上级 34d45165
......@@ -28364,6 +28364,25 @@
}, onProgress, onError);
}
async loadAsync(url, onProgress) {
const scope = this;
const path = this.path === '' ? LoaderUtils.extractUrlBase(url) : this.path;
this.resourcePath = this.resourcePath || path;
const loader = new FileLoader(this.manager);
loader.setPath(this.path);
loader.setRequestHeader(this.requestHeader);
loader.setWithCredentials(this.withCredentials);
const text = await loader.loadAsync(url, onProgress);
const json = JSON.parse(text);
const metadata = json.metadata;
if (metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry') {
throw new Error('THREE.ObjectLoader: Can\'t load ' + url);
}
return await scope.parseAsync(json);
}
parse(json, onLoad) {
const animations = this.parseAnimations(json.animations);
const shapes = this.parseShapes(json.shapes);
......@@ -28393,6 +28412,19 @@
return object;
}
async parseAsync(json) {
const animations = this.parseAnimations(json.animations);
const shapes = this.parseShapes(json.shapes);
const geometries = this.parseGeometries(json.geometries, shapes);
const images = await this.parseImagesAsync(json.images);
const textures = this.parseTextures(json.textures, images);
const materials = this.parseMaterials(json.materials, textures);
const object = this.parseObject(json.object, geometries, materials, textures, animations);
const skeletons = this.parseSkeletons(json.skeletons, object);
this.bindSkeletons(object, skeletons);
return object;
}
parseShapes(json) {
const shapes = {};
......@@ -28690,6 +28722,68 @@
return images;
}
async parseImagesAsync(json) {
const scope = this;
const images = {};
let loader;
async function deserializeImage(image) {
if (typeof image === 'string') {
const url = image;
const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test(url) ? url : scope.resourcePath + url;
return await loader.loadAsync(path);
} else {
if (image.data) {
return {
data: getTypedArray(image.type, image.data),
width: image.width,
height: image.height
};
} else {
return null;
}
}
}
if (json !== undefined && json.length > 0) {
loader = new ImageLoader(this.manager);
loader.setCrossOrigin(this.crossOrigin);
for (let i = 0, il = json.length; i < il; i++) {
const image = json[i];
const url = image.url;
if (Array.isArray(url)) {
// load array of images e.g CubeTexture
images[image.uuid] = [];
for (let j = 0, jl = url.length; j < jl; j++) {
const currentUrl = url[j];
const deserializedImage = await deserializeImage(currentUrl);
if (deserializedImage !== null) {
if (deserializedImage instanceof HTMLImageElement) {
images[image.uuid].push(deserializedImage);
} else {
// special case: handle array of data textures for cube textures
images[image.uuid].push(new DataTexture(deserializedImage.data, deserializedImage.width, deserializedImage.height));
}
}
}
} else {
// load single image
const deserializedImage = await deserializeImage(image.url);
if (deserializedImage !== null) {
images[image.uuid] = deserializedImage;
}
}
}
}
return images;
}
parseTextures(json, images) {
function parseConstant(value, type) {
if (typeof value === 'number') return value;
此差异已折叠。
......@@ -39183,6 +39183,34 @@ class ObjectLoader extends Loader {
}
async loadAsync( url, onProgress ) {
const scope = this;
const path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;
this.resourcePath = this.resourcePath || path;
const loader = new FileLoader( this.manager );
loader.setPath( this.path );
loader.setRequestHeader( this.requestHeader );
loader.setWithCredentials( this.withCredentials );
const text = await loader.loadAsync( url, onProgress );
const json = JSON.parse( text );
const metadata = json.metadata;
if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {
throw new Error( 'THREE.ObjectLoader: Can\'t load ' + url );
}
return await scope.parseAsync( json );
}
parse( json, onLoad ) {
const animations = this.parseAnimations( json.animations );
......@@ -39228,6 +39256,26 @@ class ObjectLoader extends Loader {
}
async parseAsync( json ) {
const animations = this.parseAnimations( json.animations );
const shapes = this.parseShapes( json.shapes );
const geometries = this.parseGeometries( json.geometries, shapes );
const images = await this.parseImagesAsync( json.images );
const textures = this.parseTextures( json.textures, images );
const materials = this.parseMaterials( json.materials, textures );
const object = this.parseObject( json.object, geometries, materials, textures, animations );
const skeletons = this.parseSkeletons( json.skeletons, object );
this.bindSkeletons( object, skeletons );
return object;
}
parseShapes( json ) {
const shapes = {};
......@@ -39756,6 +39804,105 @@ class ObjectLoader extends Loader {
}
async parseImagesAsync( json ) {
const scope = this;
const images = {};
let loader;
async function deserializeImage( image ) {
if ( typeof image === 'string' ) {
const url = image;
const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( url ) ? url : scope.resourcePath + url;
return await loader.loadAsync( path );
} else {
if ( image.data ) {
return {
data: getTypedArray( image.type, image.data ),
width: image.width,
height: image.height
};
} else {
return null;
}
}
}
if ( json !== undefined && json.length > 0 ) {
loader = new ImageLoader( this.manager );
loader.setCrossOrigin( this.crossOrigin );
for ( let i = 0, il = json.length; i < il; i ++ ) {
const image = json[ i ];
const url = image.url;
if ( Array.isArray( url ) ) {
// load array of images e.g CubeTexture
images[ image.uuid ] = [];
for ( let j = 0, jl = url.length; j < jl; j ++ ) {
const currentUrl = url[ j ];
const deserializedImage = await deserializeImage( currentUrl );
if ( deserializedImage !== null ) {
if ( deserializedImage instanceof HTMLImageElement ) {
images[ image.uuid ].push( deserializedImage );
} else {
// special case: handle array of data textures for cube textures
images[ image.uuid ].push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );
}
}
}
} else {
// load single image
const deserializedImage = await deserializeImage( image.url );
if ( deserializedImage !== null ) {
images[ image.uuid ] = deserializedImage;
}
}
}
}
return images;
}
parseTextures( json, images ) {
function parseConstant( value, type ) {
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册