Spaces:
Running
Running
import { | |
UVMapping, | |
CubeReflectionMapping, | |
CubeRefractionMapping, | |
EquirectangularReflectionMapping, | |
EquirectangularRefractionMapping, | |
SphericalReflectionMapping, | |
CubeUVReflectionMapping, | |
CubeUVRefractionMapping, | |
RepeatWrapping, | |
ClampToEdgeWrapping, | |
MirroredRepeatWrapping, | |
NearestFilter, | |
NearestMipMapNearestFilter, | |
NearestMipMapLinearFilter, | |
LinearFilter, | |
LinearMipMapNearestFilter, | |
LinearMipMapLinearFilter | |
} from '../constants.js'; | |
import { Color } from '../math/Color.js'; | |
import { Object3D } from '../core/Object3D.js'; | |
import { Group } from '../objects/Group.js'; | |
import { Sprite } from '../objects/Sprite.js'; | |
import { Points } from '../objects/Points.js'; | |
import { Line } from '../objects/Line.js'; | |
import { LineLoop } from '../objects/LineLoop.js'; | |
import { LineSegments } from '../objects/LineSegments.js'; | |
import { LOD } from '../objects/LOD.js'; | |
import { Mesh } from '../objects/Mesh.js'; | |
import { SkinnedMesh } from '../objects/SkinnedMesh.js'; | |
import { Shape } from '../extras/core/Shape.js'; | |
import { Fog } from '../scenes/Fog.js'; | |
import { FogExp2 } from '../scenes/FogExp2.js'; | |
import { HemisphereLight } from '../lights/HemisphereLight.js'; | |
import { SpotLight } from '../lights/SpotLight.js'; | |
import { PointLight } from '../lights/PointLight.js'; | |
import { DirectionalLight } from '../lights/DirectionalLight.js'; | |
import { AmbientLight } from '../lights/AmbientLight.js'; | |
import { RectAreaLight } from '../lights/RectAreaLight.js'; | |
import { OrthographicCamera } from '../cameras/OrthographicCamera.js'; | |
import { PerspectiveCamera } from '../cameras/PerspectiveCamera.js'; | |
import { Scene } from '../scenes/Scene.js'; | |
import { CubeTexture } from '../textures/CubeTexture.js'; | |
import { Texture } from '../textures/Texture.js'; | |
import { ImageLoader } from './ImageLoader.js'; | |
import { LoadingManager, DefaultLoadingManager } from './LoadingManager.js'; | |
import { AnimationClip } from '../animation/AnimationClip.js'; | |
import { MaterialLoader } from './MaterialLoader.js'; | |
import { LoaderUtils } from './LoaderUtils.js'; | |
import { BufferGeometryLoader } from './BufferGeometryLoader.js'; | |
import { FileLoader } from './FileLoader.js'; | |
import * as Geometries from '../geometries/Geometries.js'; | |
import * as Curves from '../extras/curves/Curves.js'; | |
/** | |
* @author mrdoob / http://mrdoob.com/ | |
*/ | |
function ObjectLoader( manager ) { | |
this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; | |
this.resourcePath = ''; | |
} | |
Object.assign( ObjectLoader.prototype, { | |
crossOrigin: 'anonymous', | |
load: function ( url, onLoad, onProgress, onError ) { | |
var scope = this; | |
var path = ( this.path === undefined ) ? LoaderUtils.extractUrlBase( url ) : this.path; | |
this.resourcePath = this.resourcePath || path; | |
var loader = new FileLoader( scope.manager ); | |
loader.setPath( this.path ); | |
loader.load( url, function ( text ) { | |
var json = null; | |
try { | |
json = JSON.parse( text ); | |
} catch ( error ) { | |
if ( onError !== undefined ) onError( error ); | |
console.error( 'THREE:ObjectLoader: Can\'t parse ' + url + '.', error.message ); | |
return; | |
} | |
var metadata = json.metadata; | |
if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) { | |
console.error( 'THREE.ObjectLoader: Can\'t load ' + url ); | |
return; | |
} | |
scope.parse( json, onLoad ); | |
}, onProgress, onError ); | |
}, | |
setPath: function ( value ) { | |
this.path = value; | |
return this; | |
}, | |
setResourcePath: function ( value ) { | |
this.resourcePath = value; | |
return this; | |
}, | |
setCrossOrigin: function ( value ) { | |
this.crossOrigin = value; | |
return this; | |
}, | |
parse: function ( json, onLoad ) { | |
var shapes = this.parseShape( json.shapes ); | |
var geometries = this.parseGeometries( json.geometries, shapes ); | |
var images = this.parseImages( json.images, function () { | |
if ( onLoad !== undefined ) onLoad( object ); | |
} ); | |
var textures = this.parseTextures( json.textures, images ); | |
var materials = this.parseMaterials( json.materials, textures ); | |
var object = this.parseObject( json.object, geometries, materials ); | |
if ( json.animations ) { | |
object.animations = this.parseAnimations( json.animations ); | |
} | |
if ( json.images === undefined || json.images.length === 0 ) { | |
if ( onLoad !== undefined ) onLoad( object ); | |
} | |
return object; | |
}, | |
parseShape: function ( json ) { | |
var shapes = {}; | |
if ( json !== undefined ) { | |
for ( var i = 0, l = json.length; i < l; i ++ ) { | |
var shape = new Shape().fromJSON( json[ i ] ); | |
shapes[ shape.uuid ] = shape; | |
} | |
} | |
return shapes; | |
}, | |
parseGeometries: function ( json, shapes ) { | |
var geometries = {}; | |
if ( json !== undefined ) { | |
var bufferGeometryLoader = new BufferGeometryLoader(); | |
for ( var i = 0, l = json.length; i < l; i ++ ) { | |
var geometry; | |
var data = json[ i ]; | |
switch ( data.type ) { | |
case 'PlaneGeometry': | |
case 'PlaneBufferGeometry': | |
geometry = new Geometries[ data.type ]( | |
data.width, | |
data.height, | |
data.widthSegments, | |
data.heightSegments | |
); | |
break; | |
case 'BoxGeometry': | |
case 'BoxBufferGeometry': | |
case 'CubeGeometry': // backwards compatible | |
geometry = new Geometries[ data.type ]( | |
data.width, | |
data.height, | |
data.depth, | |
data.widthSegments, | |
data.heightSegments, | |
data.depthSegments | |
); | |
break; | |
case 'CircleGeometry': | |
case 'CircleBufferGeometry': | |
geometry = new Geometries[ data.type ]( | |
data.radius, | |
data.segments, | |
data.thetaStart, | |
data.thetaLength | |
); | |
break; | |
case 'CylinderGeometry': | |
case 'CylinderBufferGeometry': | |
geometry = new Geometries[ data.type ]( | |
data.radiusTop, | |
data.radiusBottom, | |
data.height, | |
data.radialSegments, | |
data.heightSegments, | |
data.openEnded, | |
data.thetaStart, | |
data.thetaLength | |
); | |
break; | |
case 'ConeGeometry': | |
case 'ConeBufferGeometry': | |
geometry = new Geometries[ data.type ]( | |
data.radius, | |
data.height, | |
data.radialSegments, | |
data.heightSegments, | |
data.openEnded, | |
data.thetaStart, | |
data.thetaLength | |
); | |
break; | |
case 'SphereGeometry': | |
case 'SphereBufferGeometry': | |
geometry = new Geometries[ data.type ]( | |
data.radius, | |
data.widthSegments, | |
data.heightSegments, | |
data.phiStart, | |
data.phiLength, | |
data.thetaStart, | |
data.thetaLength | |
); | |
break; | |
case 'DodecahedronGeometry': | |
case 'DodecahedronBufferGeometry': | |
case 'IcosahedronGeometry': | |
case 'IcosahedronBufferGeometry': | |
case 'OctahedronGeometry': | |
case 'OctahedronBufferGeometry': | |
case 'TetrahedronGeometry': | |
case 'TetrahedronBufferGeometry': | |
geometry = new Geometries[ data.type ]( | |
data.radius, | |
data.detail | |
); | |
break; | |
case 'RingGeometry': | |
case 'RingBufferGeometry': | |
geometry = new Geometries[ data.type ]( | |
data.innerRadius, | |
data.outerRadius, | |
data.thetaSegments, | |
data.phiSegments, | |
data.thetaStart, | |
data.thetaLength | |
); | |
break; | |
case 'TorusGeometry': | |
case 'TorusBufferGeometry': | |
geometry = new Geometries[ data.type ]( | |
data.radius, | |
data.tube, | |
data.radialSegments, | |
data.tubularSegments, | |
data.arc | |
); | |
break; | |
case 'TorusKnotGeometry': | |
case 'TorusKnotBufferGeometry': | |
geometry = new Geometries[ data.type ]( | |
data.radius, | |
data.tube, | |
data.tubularSegments, | |
data.radialSegments, | |
data.p, | |
data.q | |
); | |
break; | |
case 'TubeGeometry': | |
case 'TubeBufferGeometry': | |
// This only works for built-in curves (e.g. CatmullRomCurve3). | |
// User defined curves or instances of CurvePath will not be deserialized. | |
geometry = new Geometries[ data.type ]( | |
new Curves[ data.path.type ]().fromJSON( data.path ), | |
data.tubularSegments, | |
data.radius, | |
data.radialSegments, | |
data.closed | |
); | |
break; | |
case 'LatheGeometry': | |
case 'LatheBufferGeometry': | |
geometry = new Geometries[ data.type ]( | |
data.points, | |
data.segments, | |
data.phiStart, | |
data.phiLength | |
); | |
break; | |
case 'PolyhedronGeometry': | |
case 'PolyhedronBufferGeometry': | |
geometry = new Geometries[ data.type ]( | |
data.vertices, | |
data.indices, | |
data.radius, | |
data.details | |
); | |
break; | |
case 'ShapeGeometry': | |
case 'ShapeBufferGeometry': | |
var geometryShapes = []; | |
for ( var j = 0, jl = data.shapes.length; j < jl; j ++ ) { | |
var shape = shapes[ data.shapes[ j ] ]; | |
geometryShapes.push( shape ); | |
} | |
geometry = new Geometries[ data.type ]( | |
geometryShapes, | |
data.curveSegments | |
); | |
break; | |
case 'ExtrudeGeometry': | |
case 'ExtrudeBufferGeometry': | |
var geometryShapes = []; | |
for ( var j = 0, jl = data.shapes.length; j < jl; j ++ ) { | |
var shape = shapes[ data.shapes[ j ] ]; | |
geometryShapes.push( shape ); | |
} | |
var extrudePath = data.options.extrudePath; | |
if ( extrudePath !== undefined ) { | |
data.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath ); | |
} | |
geometry = new Geometries[ data.type ]( | |
geometryShapes, | |
data.options | |
); | |
break; | |
case 'BufferGeometry': | |
geometry = bufferGeometryLoader.parse( data ); | |
break; | |
case 'Geometry': | |
if ( 'THREE' in window && 'LegacyJSONLoader' in THREE ) { | |
var geometryLoader = new THREE.LegacyJSONLoader(); | |
geometry = geometryLoader.parse( data, this.resourcePath ).geometry; | |
} else { | |
console.error( 'THREE.ObjectLoader: You have to import LegacyJSONLoader in order load geometry data of type "Geometry".' ); | |
} | |
break; | |
default: | |
console.warn( 'THREE.ObjectLoader: Unsupported geometry type "' + data.type + '"' ); | |
continue; | |
} | |
geometry.uuid = data.uuid; | |
if ( data.name !== undefined ) geometry.name = data.name; | |
if ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData; | |
geometries[ data.uuid ] = geometry; | |
} | |
} | |
return geometries; | |
}, | |
parseMaterials: function ( json, textures ) { | |
var cache = {}; // MultiMaterial | |
var materials = {}; | |
if ( json !== undefined ) { | |
var loader = new MaterialLoader(); | |
loader.setTextures( textures ); | |
for ( var i = 0, l = json.length; i < l; i ++ ) { | |
var data = json[ i ]; | |
if ( data.type === 'MultiMaterial' ) { | |
// Deprecated | |
var array = []; | |
for ( var j = 0; j < data.materials.length; j ++ ) { | |
var material = data.materials[ j ]; | |
if ( cache[ material.uuid ] === undefined ) { | |
cache[ material.uuid ] = loader.parse( material ); | |
} | |
array.push( cache[ material.uuid ] ); | |
} | |
materials[ data.uuid ] = array; | |
} else { | |
if ( cache[ data.uuid ] === undefined ) { | |
cache[ data.uuid ] = loader.parse( data ); | |
} | |
materials[ data.uuid ] = cache[ data.uuid ]; | |
} | |
} | |
} | |
return materials; | |
}, | |
parseAnimations: function ( json ) { | |
var animations = []; | |
for ( var i = 0; i < json.length; i ++ ) { | |
var data = json[ i ]; | |
var clip = AnimationClip.parse( data ); | |
if ( data.uuid !== undefined ) clip.uuid = data.uuid; | |
animations.push( clip ); | |
} | |
return animations; | |
}, | |
parseImages: function ( json, onLoad ) { | |
var scope = this; | |
var images = {}; | |
function loadImage( url ) { | |
scope.manager.itemStart( url ); | |
return loader.load( url, function () { | |
scope.manager.itemEnd( url ); | |
}, undefined, function () { | |
scope.manager.itemError( url ); | |
scope.manager.itemEnd( url ); | |
} ); | |
} | |
if ( json !== undefined && json.length > 0 ) { | |
var manager = new LoadingManager( onLoad ); | |
var loader = new ImageLoader( manager ); | |
loader.setCrossOrigin( this.crossOrigin ); | |
for ( var i = 0, il = json.length; i < il; i ++ ) { | |
var image = json[ i ]; | |
var url = image.url; | |
if ( Array.isArray( url ) ) { | |
// load array of images e.g CubeTexture | |
images[ image.uuid ] = []; | |
for ( var j = 0, jl = url.length; j < jl; j ++ ) { | |
var currentUrl = url[ j ]; | |
var path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( currentUrl ) ? currentUrl : scope.resourcePath + currentUrl; | |
images[ image.uuid ].push( loadImage( path ) ); | |
} | |
} else { | |
// load single image | |
var path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( image.url ) ? image.url : scope.resourcePath + image.url; | |
images[ image.uuid ] = loadImage( path ); | |
} | |
} | |
} | |
return images; | |
}, | |
parseTextures: function ( json, images ) { | |
function parseConstant( value, type ) { | |
if ( typeof value === 'number' ) return value; | |
console.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value ); | |
return type[ value ]; | |
} | |
var textures = {}; | |
if ( json !== undefined ) { | |
for ( var i = 0, l = json.length; i < l; i ++ ) { | |
var data = json[ i ]; | |
if ( data.image === undefined ) { | |
console.warn( 'THREE.ObjectLoader: No "image" specified for', data.uuid ); | |
} | |
if ( images[ data.image ] === undefined ) { | |
console.warn( 'THREE.ObjectLoader: Undefined image', data.image ); | |
} | |
var texture; | |
if ( Array.isArray( images[ data.image ] ) ) { | |
texture = new CubeTexture( images[ data.image ] ); | |
} else { | |
texture = new Texture( images[ data.image ] ); | |
} | |
texture.needsUpdate = true; | |
texture.uuid = data.uuid; | |
if ( data.name !== undefined ) texture.name = data.name; | |
if ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING ); | |
if ( data.offset !== undefined ) texture.offset.fromArray( data.offset ); | |
if ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat ); | |
if ( data.center !== undefined ) texture.center.fromArray( data.center ); | |
if ( data.rotation !== undefined ) texture.rotation = data.rotation; | |
if ( data.wrap !== undefined ) { | |
texture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING ); | |
texture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING ); | |
} | |
if ( data.format !== undefined ) texture.format = data.format; | |
if ( data.type !== undefined ) texture.type = data.type; | |
if ( data.encoding !== undefined ) texture.encoding = data.encoding; | |
if ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER ); | |
if ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER ); | |
if ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy; | |
if ( data.flipY !== undefined ) texture.flipY = data.flipY; | |
if ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha; | |
if ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment; | |
textures[ data.uuid ] = texture; | |
} | |
} | |
return textures; | |
}, | |
parseObject: function ( data, geometries, materials ) { | |
var object; | |
function getGeometry( name ) { | |
if ( geometries[ name ] === undefined ) { | |
console.warn( 'THREE.ObjectLoader: Undefined geometry', name ); | |
} | |
return geometries[ name ]; | |
} | |
function getMaterial( name ) { | |
if ( name === undefined ) return undefined; | |
if ( Array.isArray( name ) ) { | |
var array = []; | |
for ( var i = 0, l = name.length; i < l; i ++ ) { | |
var uuid = name[ i ]; | |
if ( materials[ uuid ] === undefined ) { | |
console.warn( 'THREE.ObjectLoader: Undefined material', uuid ); | |
} | |
array.push( materials[ uuid ] ); | |
} | |
return array; | |
} | |
if ( materials[ name ] === undefined ) { | |
console.warn( 'THREE.ObjectLoader: Undefined material', name ); | |
} | |
return materials[ name ]; | |
} | |
switch ( data.type ) { | |
case 'Scene': | |
object = new Scene(); | |
if ( data.background !== undefined ) { | |
if ( Number.isInteger( data.background ) ) { | |
object.background = new Color( data.background ); | |
} | |
} | |
if ( data.fog !== undefined ) { | |
if ( data.fog.type === 'Fog' ) { | |
object.fog = new Fog( data.fog.color, data.fog.near, data.fog.far ); | |
} else if ( data.fog.type === 'FogExp2' ) { | |
object.fog = new FogExp2( data.fog.color, data.fog.density ); | |
} | |
} | |
break; | |
case 'PerspectiveCamera': | |
object = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far ); | |
if ( data.focus !== undefined ) object.focus = data.focus; | |
if ( data.zoom !== undefined ) object.zoom = data.zoom; | |
if ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge; | |
if ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset; | |
if ( data.view !== undefined ) object.view = Object.assign( {}, data.view ); | |
break; | |
case 'OrthographicCamera': | |
object = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far ); | |
if ( data.zoom !== undefined ) object.zoom = data.zoom; | |
if ( data.view !== undefined ) object.view = Object.assign( {}, data.view ); | |
break; | |
case 'AmbientLight': | |
object = new AmbientLight( data.color, data.intensity ); | |
break; | |
case 'DirectionalLight': | |
object = new DirectionalLight( data.color, data.intensity ); | |
break; | |
case 'PointLight': | |
object = new PointLight( data.color, data.intensity, data.distance, data.decay ); | |
break; | |
case 'RectAreaLight': | |
object = new RectAreaLight( data.color, data.intensity, data.width, data.height ); | |
break; | |
case 'SpotLight': | |
object = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay ); | |
break; | |
case 'HemisphereLight': | |
object = new HemisphereLight( data.color, data.groundColor, data.intensity ); | |
break; | |
case 'SkinnedMesh': | |
console.warn( 'THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.' ); | |
case 'Mesh': | |
var geometry = getGeometry( data.geometry ); | |
var material = getMaterial( data.material ); | |
if ( geometry.bones && geometry.bones.length > 0 ) { | |
object = new SkinnedMesh( geometry, material ); | |
} else { | |
object = new Mesh( geometry, material ); | |
} | |
if ( data.drawMode !== undefined ) object.setDrawMode( data.drawMode ); | |
break; | |
case 'LOD': | |
object = new LOD(); | |
break; | |
case 'Line': | |
object = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode ); | |
break; | |
case 'LineLoop': | |
object = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) ); | |
break; | |
case 'LineSegments': | |
object = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) ); | |
break; | |
case 'PointCloud': | |
case 'Points': | |
object = new Points( getGeometry( data.geometry ), getMaterial( data.material ) ); | |
break; | |
case 'Sprite': | |
object = new Sprite( getMaterial( data.material ) ); | |
break; | |
case 'Group': | |
object = new Group(); | |
break; | |
default: | |
object = new Object3D(); | |
} | |
object.uuid = data.uuid; | |
if ( data.name !== undefined ) object.name = data.name; | |
if ( data.matrix !== undefined ) { | |
object.matrix.fromArray( data.matrix ); | |
if ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate; | |
if ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale ); | |
} else { | |
if ( data.position !== undefined ) object.position.fromArray( data.position ); | |
if ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation ); | |
if ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion ); | |
if ( data.scale !== undefined ) object.scale.fromArray( data.scale ); | |
} | |
if ( data.castShadow !== undefined ) object.castShadow = data.castShadow; | |
if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow; | |
if ( data.shadow ) { | |
if ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias; | |
if ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius; | |
if ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize ); | |
if ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera ); | |
} | |
if ( data.visible !== undefined ) object.visible = data.visible; | |
if ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled; | |
if ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder; | |
if ( data.userData !== undefined ) object.userData = data.userData; | |
if ( data.layers !== undefined ) object.layers.mask = data.layers; | |
if ( data.children !== undefined ) { | |
var children = data.children; | |
for ( var i = 0; i < children.length; i ++ ) { | |
object.add( this.parseObject( children[ i ], geometries, materials ) ); | |
} | |
} | |
if ( data.type === 'LOD' ) { | |
var levels = data.levels; | |
for ( var l = 0; l < levels.length; l ++ ) { | |
var level = levels[ l ]; | |
var child = object.getObjectByProperty( 'uuid', level.object ); | |
if ( child !== undefined ) { | |
object.addLevel( child, level.distance ); | |
} | |
} | |
} | |
return object; | |
} | |
} ); | |
var TEXTURE_MAPPING = { | |
UVMapping: UVMapping, | |
CubeReflectionMapping: CubeReflectionMapping, | |
CubeRefractionMapping: CubeRefractionMapping, | |
EquirectangularReflectionMapping: EquirectangularReflectionMapping, | |
EquirectangularRefractionMapping: EquirectangularRefractionMapping, | |
SphericalReflectionMapping: SphericalReflectionMapping, | |
CubeUVReflectionMapping: CubeUVReflectionMapping, | |
CubeUVRefractionMapping: CubeUVRefractionMapping | |
}; | |
var TEXTURE_WRAPPING = { | |
RepeatWrapping: RepeatWrapping, | |
ClampToEdgeWrapping: ClampToEdgeWrapping, | |
MirroredRepeatWrapping: MirroredRepeatWrapping | |
}; | |
var TEXTURE_FILTER = { | |
NearestFilter: NearestFilter, | |
NearestMipMapNearestFilter: NearestMipMapNearestFilter, | |
NearestMipMapLinearFilter: NearestMipMapLinearFilter, | |
LinearFilter: LinearFilter, | |
LinearMipMapNearestFilter: LinearMipMapNearestFilter, | |
LinearMipMapLinearFilter: LinearMipMapLinearFilter | |
}; | |
export { ObjectLoader }; | |