提交 f99a9e31 编写于 作者: D Don McCurdy

Update DRACOLoader and draco_decoder.

Adds isVersionSupported() method.
上级 19b3e0db
...@@ -44,49 +44,37 @@ THREE.DRACOLoader.prototype = { ...@@ -44,49 +44,37 @@ THREE.DRACOLoader.prototype = {
this.verbosity = level; this.verbosity = level;
}, },
decodeDracoFile: ( function() { decodeDracoFile: function(rawBuffer) {
let dracoDecoder; const dracoDecoder = THREE.DRACOLoader.getDecoder();
/*
* Here is how to use Draco Javascript decoder and get the geometry.
*/
const buffer = new dracoDecoder.DecoderBuffer();
buffer.Init(new Int8Array(rawBuffer), rawBuffer.byteLength);
const wrapper = new dracoDecoder.WebIDLWrapper();
if (typeof DracoModule === 'function') { /*
dracoDecoder = DracoModule(); * Determine what type is this file: mesh or point cloud.
} else { */
console.error('THREE.DRACOLoader: DracoModule not found.'); const geometryType = wrapper.GetEncodedGeometryType(buffer);
return; if (geometryType == dracoDecoder.TRIANGULAR_MESH) {
if (this.verbosity > 0) {
console.log('Loaded a mesh.');
} }
} else if (geometryType == dracoDecoder.POINT_CLOUD) {
return function(rawBuffer) { if (this.verbosity > 0) {
const scope = this; console.log('Loaded a point cloud.');
/*
* Here is how to use Draco Javascript decoder and get the geometry.
*/
const buffer = new dracoDecoder.DecoderBuffer();
buffer.Init(new Int8Array(rawBuffer), rawBuffer.byteLength);
const wrapper = new dracoDecoder.WebIDLWrapper();
/*
* Determine what type is this file: mesh or point cloud.
*/
const geometryType = wrapper.GetEncodedGeometryType(buffer);
if (geometryType == dracoDecoder.TRIANGULAR_MESH) {
if (this.verbosity > 0) {
console.log('Loaded a mesh.');
}
} else if (geometryType == dracoDecoder.POINT_CLOUD) {
if (this.verbosity > 0) {
console.log('Loaded a point cloud.');
}
} else {
const errorMsg = 'THREE.DRACOLoader: Unknown geometry type.'
console.error(errorMsg);
throw new Error(errorMsg);
}
return scope.convertDracoGeometryTo3JS(wrapper, geometryType, buffer,
dracoDecoder);
} }
} )(), } else {
const errorMsg = 'THREE.DRACOLoader: Unknown geometry type.'
console.error(errorMsg);
throw new Error(errorMsg);
}
return this.convertDracoGeometryTo3JS(wrapper, geometryType, buffer);
},
convertDracoGeometryTo3JS: function(wrapper, geometryType, buffer, convertDracoGeometryTo3JS: function(wrapper, geometryType, buffer) {
dracoDecoder) { const dracoDecoder = THREE.DRACOLoader.getDecoder();
let dracoGeometry; let dracoGeometry;
const start_time = performance.now(); const start_time = performance.now();
if (geometryType == dracoDecoder.TRIANGULAR_MESH) { if (geometryType == dracoDecoder.TRIANGULAR_MESH) {
...@@ -273,5 +261,28 @@ THREE.DRACOLoader.prototype = { ...@@ -273,5 +261,28 @@ THREE.DRACOLoader.prototype = {
console.log('Import time: ' + this.import_time); console.log('Import time: ' + this.import_time);
} }
return geometry; return geometry;
},
isVersionSupported: function(version) {
return THREE.DRACOLoader.getDecoder().isVersionSupported(version);
} }
}; };
\ No newline at end of file
/**
* Returns a singleton instance of the DracoModule decoder. Creating multiple
* copies of the decoder is expensive.
*/
THREE.DRACOLoader.getDecoder = (function() {
let decoder;
return function() {
if (typeof DracoModule === 'undefined') {
throw new Error('THREE.DRACOLoader: DracoModule not found.');
}
decoder = decoder || DracoModule();
return decoder;
};
})();
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册