提交 510326d9 编写于 作者: L linbingquan

Merge branch 'dev' of https://github.com/mrdoob/three.js into dev

......@@ -6079,7 +6079,7 @@
var encodings_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );";
var encodings_pars_fragment = "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}";
var encodings_pars_fragment = "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}";
var envmap_fragment = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif";
......@@ -12026,6 +12026,33 @@
toNonIndexed: function () {
function convertBufferAttribute( attribute, indices ) {
var array = attribute.array;
var itemSize = attribute.itemSize;
var array2 = new array.constructor( indices.length * itemSize );
var index = 0, index2 = 0;
for ( var i = 0, l = indices.length; i < l; i ++ ) {
index = indices[ i ] * itemSize;
for ( var j = 0; j < itemSize; j ++ ) {
array2[ index2 ++ ] = array[ index ++ ];
}
}
return new BufferAttribute( array2, itemSize );
}
//
if ( this.index === null ) {
console.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' );
......@@ -12038,33 +12065,43 @@
var indices = this.index.array;
var attributes = this.attributes;
// attributes
for ( var name in attributes ) {
var attribute = attributes[ name ];
var array = attribute.array;
var itemSize = attribute.itemSize;
var newAttribute = convertBufferAttribute( attribute, indices );
var array2 = new array.constructor( indices.length * itemSize );
geometry2.addAttribute( name, newAttribute );
var index = 0, index2 = 0;
}
for ( var i = 0, l = indices.length; i < l; i ++ ) {
// morph attributes
index = indices[ i ] * itemSize;
var morphAttributes = this.morphAttributes;
for ( var j = 0; j < itemSize; j ++ ) {
for ( name in morphAttributes ) {
array2[ index2 ++ ] = array[ index ++ ];
var morphArray = [];
var morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes
}
for ( var i = 0, il = morphAttribute.length; i < il; i ++ ) {
var attribute = morphAttribute[ i ];
var newAttribute = convertBufferAttribute( attribute, indices );
morphArray.push( newAttribute );
}
geometry2.addAttribute( name, new BufferAttribute( array2, itemSize ) );
geometry2.morphAttributes[ name ] = morphArray;
}
// groups
var groups = this.groups;
for ( var i = 0, l = groups.length; i < l; i ++ ) {
......@@ -18687,12 +18724,10 @@
if ( lights.length === 0 ) return;
// TODO Clean up (needed in case of contextlost)
var _gl = _renderer.context;
var _state = _renderer.state;
// Set GL state for depth map.
_state.disable( 3042 );
_state.setBlending( NoBlending );
_state.buffers.color.setClear( 1, 1, 1, 1 );
_state.buffers.depth.setTest( true );
_state.setScissorTest( false );
......@@ -44660,7 +44695,7 @@
geometry2.addAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );
geometry2.computeBoundingSphere();
this.add( new Mesh( geometry2, new MeshBasicMaterial( { side: THREE.BackSide, fog: false } ) ) );
this.add( new Mesh( geometry2, new MeshBasicMaterial( { side: BackSide, fog: false } ) ) );
this.update();
......@@ -45552,8 +45587,8 @@
Object3D.call( this );
if ( dir === undefined ) dir = new THREE.Vector3( 0, 0, 1 );
if ( origin === undefined ) origin = new THREE.Vector3( 0, 0, 0 );
if ( dir === undefined ) dir = new Vector3( 0, 0, 1 );
if ( origin === undefined ) origin = new Vector3( 0, 0, 0 );
if ( length === undefined ) length = 1;
if ( color === undefined ) color = 0xffff00;
if ( headLength === undefined ) headLength = 0.2 * length;
因为 它太大了无法显示 source diff 。你可以改为 查看blob
......@@ -6073,7 +6073,7 @@ var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emi
var encodings_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );";
var encodings_pars_fragment = "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}";
var encodings_pars_fragment = "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}";
var envmap_fragment = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif";
......@@ -12020,6 +12020,33 @@ BufferGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototy
toNonIndexed: function () {
function convertBufferAttribute( attribute, indices ) {
var array = attribute.array;
var itemSize = attribute.itemSize;
var array2 = new array.constructor( indices.length * itemSize );
var index = 0, index2 = 0;
for ( var i = 0, l = indices.length; i < l; i ++ ) {
index = indices[ i ] * itemSize;
for ( var j = 0; j < itemSize; j ++ ) {
array2[ index2 ++ ] = array[ index ++ ];
}
}
return new BufferAttribute( array2, itemSize );
}
//
if ( this.index === null ) {
console.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' );
......@@ -12032,33 +12059,43 @@ BufferGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototy
var indices = this.index.array;
var attributes = this.attributes;
// attributes
for ( var name in attributes ) {
var attribute = attributes[ name ];
var array = attribute.array;
var itemSize = attribute.itemSize;
var newAttribute = convertBufferAttribute( attribute, indices );
var array2 = new array.constructor( indices.length * itemSize );
geometry2.addAttribute( name, newAttribute );
var index = 0, index2 = 0;
}
for ( var i = 0, l = indices.length; i < l; i ++ ) {
// morph attributes
index = indices[ i ] * itemSize;
var morphAttributes = this.morphAttributes;
for ( var j = 0; j < itemSize; j ++ ) {
for ( name in morphAttributes ) {
array2[ index2 ++ ] = array[ index ++ ];
var morphArray = [];
var morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes
}
for ( var i = 0, il = morphAttribute.length; i < il; i ++ ) {
var attribute = morphAttribute[ i ];
var newAttribute = convertBufferAttribute( attribute, indices );
morphArray.push( newAttribute );
}
geometry2.addAttribute( name, new BufferAttribute( array2, itemSize ) );
geometry2.morphAttributes[ name ] = morphArray;
}
// groups
var groups = this.groups;
for ( var i = 0, l = groups.length; i < l; i ++ ) {
......@@ -18681,12 +18718,10 @@ function WebGLShadowMap( _renderer, _objects, maxTextureSize ) {
if ( lights.length === 0 ) return;
// TODO Clean up (needed in case of contextlost)
var _gl = _renderer.context;
var _state = _renderer.state;
// Set GL state for depth map.
_state.disable( 3042 );
_state.setBlending( NoBlending );
_state.buffers.color.setClear( 1, 1, 1, 1 );
_state.buffers.depth.setTest( true );
_state.setScissorTest( false );
......@@ -44654,7 +44689,7 @@ function RectAreaLightHelper( light, color ) {
geometry2.addAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );
geometry2.computeBoundingSphere();
this.add( new Mesh( geometry2, new MeshBasicMaterial( { side: THREE.BackSide, fog: false } ) ) );
this.add( new Mesh( geometry2, new MeshBasicMaterial( { side: BackSide, fog: false } ) ) );
this.update();
......@@ -45546,8 +45581,8 @@ function ArrowHelper( dir, origin, length, color, headLength, headWidth ) {
Object3D.call( this );
if ( dir === undefined ) dir = new THREE.Vector3( 0, 0, 1 );
if ( origin === undefined ) origin = new THREE.Vector3( 0, 0, 0 );
if ( dir === undefined ) dir = new Vector3( 0, 0, 1 );
if ( origin === undefined ) origin = new Vector3( 0, 0, 0 );
if ( length === undefined ) length = 1;
if ( color === undefined ) color = 0xffff00;
if ( headLength === undefined ) headLength = 0.2 * length;
import './polyfills';
export { WebGLRenderTargetCube } from './renderers/WebGLRenderTargetCube';
export { WebGLRenderTarget } from './renderers/WebGLRenderTarget';
export { WebGLRenderer } from './renderers/WebGLRenderer';
export { ShaderLib } from './renderers/shaders/ShaderLib';
export { UniformsLib } from './renderers/shaders/UniformsLib';
export { UniformsUtils } from './renderers/shaders/UniformsUtils';
export { ShaderChunk } from './renderers/shaders/ShaderChunk';
export { FogExp2 } from './scenes/FogExp2';
export { Fog } from './scenes/Fog';
export { Scene } from './scenes/Scene';
export { Sprite } from './objects/Sprite';
export { LOD } from './objects/LOD';
export { SkinnedMesh } from './objects/SkinnedMesh';
export { Skeleton } from './objects/Skeleton';
export { Bone } from './objects/Bone';
export { Mesh } from './objects/Mesh';
export { LineSegments } from './objects/LineSegments';
export { Line } from './objects/Line';
export { Points } from './objects/Points';
export { Group } from './objects/Group';
export { VideoTexture } from './textures/VideoTexture';
export { DataTexture } from './textures/DataTexture';
export { CompressedTexture } from './textures/CompressedTexture';
export { CubeTexture } from './textures/CubeTexture';
export { CanvasTexture } from './textures/CanvasTexture';
export { DepthTexture } from './textures/DepthTexture';
export { Texture } from './textures/Texture';
export * from './geometries/Geometries';
export * from './materials/Materials';
export { CompressedTextureLoader } from './loaders/CompressedTextureLoader';
export { DataTextureLoader } from './loaders/DataTextureLoader';
export { CubeTextureLoader } from './loaders/CubeTextureLoader';
export { TextureLoader } from './loaders/TextureLoader';
export { ObjectLoader } from './loaders/ObjectLoader';
export { MaterialLoader } from './loaders/MaterialLoader';
export { BufferGeometryLoader } from './loaders/BufferGeometryLoader';
export { LoadingManager, DefaultLoadingManager, } from './loaders/LoadingManager';
export { ImageLoader } from './loaders/ImageLoader';
export { FontLoader } from './loaders/FontLoader';
export { FileLoader } from './loaders/FileLoader';
export { Loader } from './loaders/Loader';
export { LoaderUtils } from './loaders/LoaderUtils';
export { Cache } from './loaders/Cache';
export { AudioLoader } from './loaders/AudioLoader';
export { SpotLightShadow } from './lights/SpotLightShadow';
export { SpotLight } from './lights/SpotLight';
export { PointLight } from './lights/PointLight';
export { HemisphereLight } from './lights/HemisphereLight';
export { DirectionalLightShadow } from './lights/DirectionalLightShadow';
export { DirectionalLight } from './lights/DirectionalLight';
export { AmbientLight } from './lights/AmbientLight';
export { LightShadow } from './lights/LightShadow';
export { Light } from './lights/Light';
export { StereoCamera } from './cameras/StereoCamera';
export { PerspectiveCamera } from './cameras/PerspectiveCamera';
export { OrthographicCamera } from './cameras/OrthographicCamera';
export { CubeCamera } from './cameras/CubeCamera';
export { ArrayCamera } from './cameras/ArrayCamera';
export { Camera } from './cameras/Camera';
export { AudioListener } from './audio/AudioListener';
export { PositionalAudio } from './audio/PositionalAudio';
export { AudioContext } from './audio/AudioContext';
export { AudioAnalyser } from './audio/AudioAnalyser';
export { Audio } from './audio/Audio';
export { VectorKeyframeTrack } from './animation/tracks/VectorKeyframeTrack';
export { StringKeyframeTrack } from './animation/tracks/StringKeyframeTrack';
export { QuaternionKeyframeTrack, } from './animation/tracks/QuaternionKeyframeTrack';
export { NumberKeyframeTrack } from './animation/tracks/NumberKeyframeTrack';
export { ColorKeyframeTrack } from './animation/tracks/ColorKeyframeTrack';
export { BooleanKeyframeTrack } from './animation/tracks/BooleanKeyframeTrack';
export { PropertyMixer } from './animation/PropertyMixer';
export { PropertyBinding } from './animation/PropertyBinding';
export { KeyframeTrack } from './animation/KeyframeTrack';
export { AnimationUtils } from './animation/AnimationUtils';
export { AnimationObjectGroup } from './animation/AnimationObjectGroup';
export { AnimationMixer } from './animation/AnimationMixer';
export { AnimationClip } from './animation/AnimationClip';
export { Uniform } from './core/Uniform';
export { InstancedBufferGeometry } from './core/InstancedBufferGeometry';
export { BufferGeometry } from './core/BufferGeometry';
export { Geometry } from './core/Geometry';
export { InterleavedBufferAttribute } from './core/InterleavedBufferAttribute';
export { InstancedInterleavedBuffer } from './core/InstancedInterleavedBuffer';
export { InterleavedBuffer } from './core/InterleavedBuffer';
export { InstancedBufferAttribute } from './core/InstancedBufferAttribute';
export * from './core/BufferAttribute';
export { Face3 } from './core/Face3';
export { Object3D } from './core/Object3D';
export { Raycaster } from './core/Raycaster';
export { Layers } from './core/Layers';
export { EventDispatcher } from './core/EventDispatcher';
export { Clock } from './core/Clock';
export { QuaternionLinearInterpolant, } from './math/interpolants/QuaternionLinearInterpolant';
export { LinearInterpolant } from './math/interpolants/LinearInterpolant';
export { DiscreteInterpolant } from './math/interpolants/DiscreteInterpolant';
export { CubicInterpolant } from './math/interpolants/CubicInterpolant';
export { Interpolant } from './math/Interpolant';
export { Triangle } from './math/Triangle';
export { _Math as Math } from './math/Math';
export { Spherical } from './math/Spherical';
export { Cylindrical } from './math/Cylindrical';
export { Plane } from './math/Plane';
export { Frustum } from './math/Frustum';
export { Sphere } from './math/Sphere';
export { Ray } from './math/Ray';
export { Matrix4 } from './math/Matrix4';
export { Matrix3 } from './math/Matrix3';
export { Box3 } from './math/Box3';
export { Box2 } from './math/Box2';
export { Line3 } from './math/Line3';
export { Euler } from './math/Euler';
export { Vector4 } from './math/Vector4';
export { Vector3 } from './math/Vector3';
export { Vector2 } from './math/Vector2';
export { Quaternion } from './math/Quaternion';
export { Color } from './math/Color';
export { ImmediateRenderObject } from './extras/objects/ImmediateRenderObject';
export { VertexNormalsHelper } from './helpers/VertexNormalsHelper';
export { SpotLightHelper } from './helpers/SpotLightHelper';
export { SkeletonHelper } from './helpers/SkeletonHelper';
export { PointLightHelper } from './helpers/PointLightHelper';
export { HemisphereLightHelper } from './helpers/HemisphereLightHelper';
export { GridHelper } from './helpers/GridHelper';
export { FaceNormalsHelper } from './helpers/FaceNormalsHelper';
export { DirectionalLightHelper } from './helpers/DirectionalLightHelper';
export { CameraHelper } from './helpers/CameraHelper';
export { BoxHelper } from './helpers/BoxHelper';
export { PlaneHelper } from './helpers/PlaneHelper';
export { ArrowHelper } from './helpers/ArrowHelper';
export { AxesHelper } from './helpers/AxesHelper';
export * from './extras/curves/Curves';
export { Shape } from './extras/core/Shape';
export { Path } from './extras/core/Path';
export { ShapePath } from './extras/core/ShapePath';
export { Font } from './extras/core/Font';
export { CurvePath } from './extras/core/CurvePath';
export { Curve } from './extras/core/Curve';
export { ImageUtils } from './extras/ImageUtils';
export { ShapeUtils } from './extras/ShapeUtils';
export * from './constants';
export * from './Three.Legacy';
//# sourceMappingURL=Three.d.ts.map
\ No newline at end of file
......@@ -66,6 +66,11 @@
<h2>Methods</h2>
<h3>[method:AnimationClip clone]()</h3>
<p>
Returns a copy of this clip.
</p>
<h3>[method:this optimize]()</h3>
<p>
Optimizes each track by removing equivalent sequential keys (which are common in morph target
......
......@@ -160,6 +160,11 @@
<h2>Methods</h2>
<h3>[method:KeyframeTrack clone]()</h3>
<p>
Returns a copy of this track.
</p>
<h3>[method:null createInterpolant]()</h3>
<p>
Creates a [page:LinearInterpolant LinearInterpolant], [page:CubicInterpolant CubicInterpolant]
......
......@@ -62,6 +62,9 @@
<h2>方法</h2>
<h3>[method:AnimationClip clone]()</h3>
<p></p>
<h3>[method:this optimize]()</h3>
<p>
通过移除等效的顺序键(在变形目标序列中很常见)来优化每一个轨道
......
......@@ -38,12 +38,18 @@
返回一个数组,时间和值可以根据此数组排序。
</p>
<h3>[method:Number insertKeyframe]( [param:KeyframeTrack track], [param:Number time] )</h3>
<p></p>
<h3>[method:Boolean isTypedArray]( object )</h3>
<p>
如果该对象是类型化数组,返回*true*
</p>
<h3>[method:AnimationClip mergeMorphTargetTracks]( [param:AnimationClip clip], [param:Object3D root] )</h3>
<p></p>
<h3>[method:Array sortedArray]( values, stride, order )</h3>
<p>
将[page:AnimationUtils.getKeyframeOrder getKeyframeOrder]方法返回的数组排序。
......
......@@ -137,6 +137,9 @@
<h2>方法</h2>
<h3>[method:KeyframeTrack clone]()</h3>
<p></p>
<h3>[method:null createInterpolant]()</h3>
<p>
根据传入构造器中的插值类型参数,创建线性插值([page:LinearInterpolant LinearInterpolant]),立方插值([page:CubicInterpolant CubicInterpolant])或离散插值
......
......@@ -29,6 +29,7 @@
</p>
<ul>
<li>KHR_lights_punctual</li>
<li>KHR_materials_unlit</li>
<li>KHR_texture_transform</li>
</ul>
......
......@@ -7,7 +7,6 @@
THREE.FirstPersonControls = function ( object, domElement ) {
this.object = object;
this.target = new THREE.Vector3( 0, 0, 0 );
this.domElement = ( domElement !== undefined ) ? domElement : document;
......@@ -37,8 +36,6 @@ THREE.FirstPersonControls = function ( object, domElement ) {
this.lat = 0;
this.lon = 0;
this.phi = 0;
this.theta = 0;
this.moveForward = false;
this.moveBackward = false;
......@@ -184,7 +181,11 @@ THREE.FirstPersonControls = function ( object, domElement ) {
};
this.update = function ( delta ) {
this.update = function () {
var targetPosition = new THREE.Vector3();
return function update( delta ) {
if ( this.enabled === false ) return;
......@@ -228,31 +229,30 @@ THREE.FirstPersonControls = function ( object, domElement ) {
}
this.lon += this.mouseX * actualLookSpeed;
this.lon -= this.mouseX * actualLookSpeed;
if ( this.lookVertical ) this.lat -= this.mouseY * actualLookSpeed * verticalLookRatio;
this.lat = Math.max( - 85, Math.min( 85, this.lat ) );
this.phi = THREE.Math.degToRad( 90 - this.lat );
this.theta = THREE.Math.degToRad( this.lon );
var phi = THREE.Math.degToRad( 90 - this.lat );
var theta = THREE.Math.degToRad( this.lon );
if ( this.constrainVertical ) {
this.phi = THREE.Math.mapLinear( this.phi, 0, Math.PI, this.verticalMin, this.verticalMax );
phi = THREE.Math.mapLinear( phi, 0, Math.PI, this.verticalMin, this.verticalMax );
}
var targetPosition = this.target,
position = this.object.position;
var position = this.object.position;
targetPosition.x = position.x + 100 * Math.sin( this.phi ) * Math.cos( this.theta );
targetPosition.y = position.y + 100 * Math.cos( this.phi );
targetPosition.z = position.z + 100 * Math.sin( this.phi ) * Math.sin( this.theta );
targetPosition.setFromSphericalCoords( 1, phi, theta ).add( position );
this.object.lookAt( targetPosition );
};
}();
function contextmenu( event ) {
event.preventDefault();
......
......@@ -981,7 +981,10 @@ THREE.GLTFExporter.prototype = {
// occlusionTexture
if ( material.aoMap ) {
var occlusionMapDef = { index: processTexture( material.aoMap ) };
var occlusionMapDef = {
index: processTexture( material.aoMap ),
texCoord: 1
};
if ( material.aoMapIntensity !== 1.0 ) {
......@@ -1227,9 +1230,9 @@ THREE.GLTFExporter.prototype = {
var baseAttribute = geometry.attributes[ attributeName ];
if ( cachedData.attributes.has( baseAttribute ) ) {
if ( cachedData.attributes.has( attribute ) ) {
target[ gltfAttributeName ] = cachedData.attributes.get( baseAttribute );
target[ gltfAttributeName ] = cachedData.attributes.get( attribute );
continue;
}
......@@ -1443,12 +1446,15 @@ THREE.GLTFExporter.prototype = {
}
clip = THREE.GLTFExporter.Utils.mergeMorphTargetTracks( clip.clone(), root );
var tracks = clip.tracks;
var channels = [];
var samplers = [];
for ( var i = 0; i < clip.tracks.length; ++ i ) {
for ( var i = 0; i < tracks.length; ++ i ) {
var track = clip.tracks[ i ];
var track = tracks[ i ];
var trackBinding = THREE.PropertyBinding.parseTrackName( track.name );
var trackNode = THREE.PropertyBinding.findNode( root, trackBinding.nodeName );
var trackProperty = PATH_PROPERTIES[ trackBinding.propertyName ];
......@@ -1479,16 +1485,6 @@ THREE.GLTFExporter.prototype = {
if ( trackProperty === PATH_PROPERTIES.morphTargetInfluences ) {
if ( trackNode.morphTargetInfluences.length !== 1 &&
trackBinding.propertyIndex !== undefined ) {
console.warn( 'THREE.GLTFExporter: Skipping animation track "%s". ' +
'Morph target keyframe tracks must target all available morph targets ' +
'for the given mesh.', track.name );
continue;
}
outputItemSize /= trackNode.morphTargetInfluences.length;
}
......@@ -1591,6 +1587,59 @@ THREE.GLTFExporter.prototype = {
}
function processLight( light ) {
var lightDef = {};
if ( light.name ) lightDef.name = light.name;
lightDef.color = light.color.toArray();
lightDef.intensity = light.intensity;
if ( light.isDirectionalLight ) {
lightDef.type = 'directional';
} else if ( light.isPointLight ) {
lightDef.type = 'point';
if ( light.distance > 0 ) lightDef.range = light.distance;
} else if ( light.isSpotLight ) {
lightDef.type = 'spot';
if ( light.distance > 0 ) lightDef.range = light.distance;
lightDef.spot = {};
lightDef.spot.innerConeAngle = ( light.penumbra - 1.0 ) * light.angle * -1.0;
lightDef.spot.outerConeAngle = light.angle;
}
if ( light.decay !== undefined && light.decay !== 2 ) {
console.warn( 'THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, '
+ 'and expects light.decay=2.' );
}
if ( light.target
&& ( light.target.parent !== light
|| light.target.position.x !== 0
|| light.target.position.y !== 0
|| light.target.position.z !== -1 ) ) {
console.warn( 'THREE.GLTFExporter: Light direction may be lost. For best results, '
+ 'make light.target a child of the light with position 0,0,-1.' );
}
var lights = outputJSON.extensions[ 'KHR_lights_punctual' ].lights;
lights.push( lightDef );
return lights.length - 1;
}
/**
* Process Object3D node
* @param {THREE.Object3D} node Object3D to processNode
......@@ -1598,13 +1647,6 @@ THREE.GLTFExporter.prototype = {
*/
function processNode( object ) {
if ( object.isLight ) {
console.warn( 'GLTFExporter: Unsupported node type:', object.constructor.name );
return null;
}
if ( ! outputJSON.nodes ) {
outputJSON.nodes = [];
......@@ -1675,6 +1717,24 @@ THREE.GLTFExporter.prototype = {
gltfNode.camera = processCamera( object );
} else if ( object.isDirectionalLight || object.isPointLight || object.isSpotLight ) {
if ( ! extensionsUsed[ 'KHR_lights_punctual' ] ) {
outputJSON.extensions = outputJSON.extensions || {};
outputJSON.extensions[ 'KHR_lights_punctual' ] = { lights: [] };
extensionsUsed[ 'KHR_lights_punctual' ] = true;
}
gltfNode.extensions = gltfNode.extensions || {};
gltfNode.extensions[ 'KHR_lights_punctual' ] = { light: processLight( object ) };
} else if ( object.isLight ) {
console.warn( 'THREE.GLTFExporter: Only directional, point, and spot lights are supported.' );
return null;
}
if ( object.isSkinnedMesh ) {
......@@ -1942,3 +2002,196 @@ THREE.GLTFExporter.prototype = {
}
};
THREE.GLTFExporter.Utils = {
insertKeyframe: function ( track, time ) {
var tolerance = 0.001; // 1ms
var valueSize = track.getValueSize();
var times = new track.TimeBufferType( track.times.length + 1 );
var values = new track.ValueBufferType( track.values.length + valueSize );
var interpolant = track.createInterpolant( new track.ValueBufferType( valueSize ) );
var index;
if ( track.times.length === 0 ) {
times[ 0 ] = time;
for ( var i = 0; i < valueSize; i ++ ) {
values[ i ] = 0;
}
index = 0;
} else if ( time < track.times[ 0 ] ) {
if ( Math.abs( track.times[ 0 ] - time ) < tolerance ) return 0;
times[ 0 ] = time;
times.set( track.times, 1 );
values.set( interpolant.evaluate( time ), 0 );
values.set( track.values, valueSize );
index = 0;
} else if ( time > track.times[ track.times.length - 1 ] ) {
if ( Math.abs( track.times[ track.times.length - 1 ] - time ) < tolerance ) {
return track.times.length - 1;
}
times[ times.length - 1 ] = time;
times.set( track.times, 0 );
values.set( track.values, 0 );
values.set( interpolant.evaluate( time ), track.values.length );
index = times.length - 1;
} else {
for ( var i = 0; i < track.times.length; i ++ ) {
if ( Math.abs( track.times[ i ] - time ) < tolerance ) return i;
if ( track.times[ i ] < time && track.times[ i + 1 ] > time ) {
times.set( track.times.slice( 0, i + 1 ), 0 );
times[ i + 1 ] = time;
times.set( track.times.slice( i + 1 ), i + 2 );
values.set( track.values.slice( 0, ( i + 1 ) * valueSize ), 0 );
values.set( interpolant.evaluate( time ), ( i + 1 ) * valueSize );
values.set( track.values.slice( ( i + 1 ) * valueSize ), ( i + 2 ) * valueSize );
index = i + 1;
break;
}
}
}
track.times = times;
track.values = values;
return index;
},
mergeMorphTargetTracks: function ( clip, root ) {
var tracks = [];
var mergedTracks = {};
var sourceTracks = clip.tracks;
for ( var i = 0; i < sourceTracks.length; ++ i ) {
var sourceTrack = sourceTracks[ i ];
var sourceTrackBinding = THREE.PropertyBinding.parseTrackName( sourceTrack.name );
var sourceTrackNode = THREE.PropertyBinding.findNode( root, sourceTrackBinding.nodeName );
if ( sourceTrackBinding.propertyName !== 'morphTargetInfluences' || sourceTrackBinding.propertyIndex === undefined ) {
// Tracks that don't affect morph targets, or that affect all morph targets together, can be left as-is.
tracks.push( sourceTrack );
continue;
}
if ( sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete
&& sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear ) {
if ( sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {
// This should never happen, because glTF morph target animations
// affect all targets already.
throw new Error( 'THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.' );
}
console.warn( 'THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.' );
sourceTrack = sourceTrack.clone();
sourceTrack.setInterpolation( InterpolateLinear );
}
var targetCount = sourceTrackNode.morphTargetInfluences.length;
var targetIndex = sourceTrackNode.morphTargetDictionary[ sourceTrackBinding.propertyIndex ];
if ( targetIndex === undefined ) {
throw new Error( 'THREE.GLTFExporter: Morph target name not found: ' + sourceTrackBinding.propertyIndex );
}
var mergedTrack;
// If this is the first time we've seen this object, create a new
// track to store merged keyframe data for each morph target.
if ( mergedTracks[ sourceTrackNode.uuid ] === undefined ) {
mergedTrack = sourceTrack.clone();
var values = new mergedTrack.ValueBufferType( targetCount * mergedTrack.times.length );
for ( var j = 0; j < mergedTrack.times.length; j ++ ) {
values[ j * targetCount + targetIndex ] = mergedTrack.values[ j ];
}
mergedTrack.name = '.morphTargetInfluences';
mergedTrack.values = values;
mergedTracks[ sourceTrackNode.uuid ] = mergedTrack;
tracks.push( mergedTrack );
continue;
}
var mergedKeyframeIndex = 0;
var sourceKeyframeIndex = 0;
var sourceInterpolant = sourceTrack.createInterpolant( new sourceTrack.ValueBufferType( 1 ) );
mergedTrack = mergedTracks[ sourceTrackNode.uuid ];
// For every existing keyframe of the merged track, write a (possibly
// interpolated) value from the source track.
for ( var j = 0; j < mergedTrack.times.length; j ++ ) {
mergedTrack.values[ j * targetCount + targetIndex ] = sourceInterpolant.evaluate( mergedTrack.times[ j ] );
}
// For every existing keyframe of the source track, write a (possibly
// new) keyframe to the merged track. Values from the previous loop may
// be written again, but keyframes are de-duplicated.
for ( var j = 0; j < sourceTrack.times.length; j ++ ) {
var keyframeIndex = this.insertKeyframe( mergedTrack, sourceTrack.times[ j ] );
mergedTrack.values[ keyframeIndex * targetCount + targetIndex ] = sourceTrack.values[ j ];
}
}
clip.tracks = tracks;
return clip;
}
};
......@@ -365,6 +365,10 @@ THREE.GLTFLoader = ( function () {
}
// Some lights (e.g. spot) default to a position other than the origin. Reset the position
// here, because node-level parsing will only override position if explicitly specified.
lightNode.position.set( 0, 0, 0 );
lightNode.decay = 2;
if ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;
......
......@@ -131,7 +131,7 @@ ColorSpaceNode.Nodes = ( function () {
var LinearToLogLuv = new FunctionNode( [
"vec4 LinearToLogLuv( in vec4 value ) {",
" vec3 Xp_Y_XYZp = value.rgb * cLogLuvM;",
" vec3 Xp_Y_XYZp = cLogLuvM * value.rgb;",
" Xp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));",
" vec4 vResult;",
" vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;",
......@@ -155,7 +155,7 @@ ColorSpaceNode.Nodes = ( function () {
" Xp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);",
" Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;",
" Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;",
" vec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;",
" vec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;",
" return vec4( max(vRGB, 0.0), 1.0 );",
"}"
......
......@@ -369,19 +369,26 @@ THREE.SSAOPass.prototype = Object.assign( Object.create( THREE.Pass.prototype ),
var simplex = new SimplexNoise();
var size = width * height;
var data = new Float32Array( size );
var data = new Float32Array( size * 4 );
for ( var i = 0; i < size; i ++ ) {
var stride = i * 4;
var x = ( Math.random() * 2 ) - 1;
var y = ( Math.random() * 2 ) - 1;
var z = 0;
data[ i ] = simplex.noise3d( x, y, z );
var noise = simplex.noise3d( x, y, z );
data[ stride ] = noise;
data[ stride + 1 ] = noise;
data[ stride + 2 ] = noise;
data[ stride + 3 ] = 1;
}
this.noiseTexture = new THREE.DataTexture( data, width, height, THREE.LuminanceFormat, THREE.FloatType );
this.noiseTexture = new THREE.DataTexture( data, width, height, THREE.RGBA, THREE.FloatType );
this.noiseTexture.wrapS = THREE.RepeatWrapping;
this.noiseTexture.wrapT = THREE.RepeatWrapping;
this.noiseTexture.needsUpdate = true;
......
......@@ -182,7 +182,9 @@
// DirectLight
// ---------------------------------------------------------------------
light = new THREE.DirectionalLight( 0xffffff, 1 );
light.position.set( 1, 1, 0 );
light.target.position.set( 0, 0, -1 );
light.add( light.target );
light.lookAt( -1, -1, 0 );
light.name = 'DirectionalLight';
scene1.add( light );
......
......@@ -151,7 +151,7 @@
controls.addEventListener( 'start', function () {
cancelHideTransorm();
cancelHideTransform();
} );
......@@ -173,13 +173,13 @@
// Hiding transform situation is a little in a mess :()
transformControl.addEventListener( 'change', function () {
cancelHideTransorm();
cancelHideTransform();
} );
transformControl.addEventListener( 'mouseDown', function () {
cancelHideTransorm();
cancelHideTransform();
} );
......@@ -200,7 +200,7 @@
dragcontrols.addEventListener( 'hoveron', function ( event ) {
transformControl.attach( event.object );
cancelHideTransorm();
cancelHideTransform();
} );
......@@ -214,7 +214,7 @@
function delayHideTransform() {
cancelHideTransorm();
cancelHideTransform();
hideTransform();
}
......@@ -229,7 +229,7 @@
}
function cancelHideTransorm() {
function cancelHideTransform() {
if ( hiding ) clearTimeout( hiding );
......
import { Geometry } from './core/Geometry';
import { Material } from './materials/Material';
import { Object3D } from './core/Object3D';
import { Scene } from './scenes/Scene';
export namespace SceneUtils {
export function createMultiMaterialObject(
geometry: Geometry,
materials: Material[]
): Object3D;
export function detach(child: Object3D, parent: Object3D, scene: Scene): void;
export function attach(child: Object3D, scene: Scene, parent: Object3D): void;
}
import './polyfills';
export {
WebGLMultisampleRenderTarget,
} from './renderers/WebGLMultisampleRenderTarget';
export { WebGLRenderTargetCube } from './renderers/WebGLRenderTargetCube';
export { WebGLRenderTarget } from './renderers/WebGLRenderTarget';
export { WebGLRenderer } from './renderers/WebGLRenderer';
export { ShaderLib } from './renderers/shaders/ShaderLib';
export { UniformsLib } from './renderers/shaders/UniformsLib';
export { UniformsUtils } from './renderers/shaders/UniformsUtils';
export { ShaderChunk } from './renderers/shaders/ShaderChunk';
export { FogExp2 } from './scenes/FogExp2';
export { Fog } from './scenes/Fog';
export { Scene } from './scenes/Scene';
export { Sprite } from './objects/Sprite';
export { LOD } from './objects/LOD';
export { SkinnedMesh } from './objects/SkinnedMesh';
export { Skeleton } from './objects/Skeleton';
export { Bone } from './objects/Bone';
export { Mesh } from './objects/Mesh';
export { LineSegments } from './objects/LineSegments';
export { LineLoop } from './objects/LineLoop';
export { Line } from './objects/Line';
export { Points } from './objects/Points';
export { Group } from './objects/Group';
export { VideoTexture } from './textures/VideoTexture';
export { DataTexture } from './textures/DataTexture';
export { DataTexture3D } from './textures/DataTexture3D';
export { CompressedTexture } from './textures/CompressedTexture';
export { CubeTexture } from './textures/CubeTexture';
export { CanvasTexture } from './textures/CanvasTexture';
export { DepthTexture } from './textures/DepthTexture';
export { Texture } from './textures/Texture';
export * from './geometries/Geometries';
export * from './materials/Materials';
//export { AnimationLoader } from './loaders/AnimationLoader';
export { CompressedTextureLoader } from './loaders/CompressedTextureLoader';
export { DataTextureLoader } from './loaders/DataTextureLoader';
export { CubeTextureLoader } from './loaders/CubeTextureLoader';
export { TextureLoader } from './loaders/TextureLoader';
export { ObjectLoader } from './loaders/ObjectLoader';
export { MaterialLoader } from './loaders/MaterialLoader';
export { BufferGeometryLoader } from './loaders/BufferGeometryLoader';
export { LoadingManager } from './loaders/LoadingManager';
export { ImageLoader } from './loaders/ImageLoader';
export { ImageBitmapLoader } from './loaders/ImageBitmapLoader';
export { FontLoader } from './loaders/FontLoader';
export { FileLoader } from './loaders/FileLoader';
export { Loader } from './loaders/Loader';
export { LoaderUtils } from './loaders/LoaderUtils';
export { Cache } from './loaders/Cache';
export { AudioLoader } from './loaders/AudioLoader';
export { SpotLightShadow } from './lights/SpotLightShadow';
export { SpotLight } from './lights/SpotLight';
export { PointLight } from './lights/PointLight';
export { RectAreaLight } from './lights/RectAreaLight';
export { HemisphereLight } from './lights/HemisphereLight';
export { DirectionalLightShadow } from './lights/DirectionalLightShadow';
export { DirectionalLight } from './lights/DirectionalLight';
export { AmbientLight } from './lights/AmbientLight';
export { LightShadow } from './lights/LightShadow';
export { Light } from './lights/Light';
export { StereoCamera } from './cameras/StereoCamera';
export { PerspectiveCamera } from './cameras/PerspectiveCamera';
export { OrthographicCamera } from './cameras/OrthographicCamera';
export { CubeCamera } from './cameras/CubeCamera';
export { ArrayCamera } from './cameras/ArrayCamera';
export { Camera } from './cameras/Camera';
export { AudioListener } from './audio/AudioListener';
export { PositionalAudio } from './audio/PositionalAudio';
export { AudioContext } from './audio/AudioContext';
export { AudioAnalyser } from './audio/AudioAnalyser';
export { Audio } from './audio/Audio';
export { VectorKeyframeTrack } from './animation/tracks/VectorKeyframeTrack';
export { StringKeyframeTrack } from './animation/tracks/StringKeyframeTrack';
export {
QuaternionKeyframeTrack,
} from './animation/tracks/QuaternionKeyframeTrack';
export { NumberKeyframeTrack } from './animation/tracks/NumberKeyframeTrack';
export { ColorKeyframeTrack } from './animation/tracks/ColorKeyframeTrack';
export { BooleanKeyframeTrack } from './animation/tracks/BooleanKeyframeTrack';
export { PropertyMixer } from './animation/PropertyMixer';
export { PropertyBinding } from './animation/PropertyBinding';
export { KeyframeTrack } from './animation/KeyframeTrack';
export { AnimationUtils } from './animation/AnimationUtils';
export { AnimationObjectGroup } from './animation/AnimationObjectGroup';
export { AnimationMixer } from './animation/AnimationMixer';
export { AnimationClip } from './animation/AnimationClip';
export { Uniform } from './core/Uniform';
export { InstancedBufferGeometry } from './core/InstancedBufferGeometry';
export { BufferGeometry } from './core/BufferGeometry';
export { Geometry } from './core/Geometry';
export { InterleavedBufferAttribute } from './core/InterleavedBufferAttribute';
export { InstancedInterleavedBuffer } from './core/InstancedInterleavedBuffer';
export { InterleavedBuffer } from './core/InterleavedBuffer';
export { InstancedBufferAttribute } from './core/InstancedBufferAttribute';
export * from './core/BufferAttribute';
export { Face3 } from './core/Face3';
export { Object3D } from './core/Object3D';
export { Raycaster } from './core/Raycaster';
export { Layers } from './core/Layers';
export { EventDispatcher } from './core/EventDispatcher';
export { Clock } from './core/Clock';
export {
QuaternionLinearInterpolant,
} from './math/interpolants/QuaternionLinearInterpolant';
export { LinearInterpolant } from './math/interpolants/LinearInterpolant';
export { DiscreteInterpolant } from './math/interpolants/DiscreteInterpolant';
export { CubicInterpolant } from './math/interpolants/CubicInterpolant';
export { Interpolant } from './math/Interpolant';
export { Triangle } from './math/Triangle';
export { _Math as Math } from './math/Math';
export { Spherical } from './math/Spherical';
export { Cylindrical } from './math/Cylindrical';
export { Plane } from './math/Plane';
export { Frustum } from './math/Frustum';
export { Sphere } from './math/Sphere';
export { Ray } from './math/Ray';
export { Matrix4 } from './math/Matrix4';
export { Matrix3 } from './math/Matrix3';
export { Box3 } from './math/Box3';
export { Box2 } from './math/Box2';
export { Line3 } from './math/Line3';
export { Euler } from './math/Euler';
export { Vector4 } from './math/Vector4';
export { Vector3 } from './math/Vector3';
export { Vector2 } from './math/Vector2';
export { Quaternion } from './math/Quaternion';
export { Color } from './math/Color';
export { ImmediateRenderObject } from './extras/objects/ImmediateRenderObject';
export { VertexNormalsHelper } from './helpers/VertexNormalsHelper';
export { SpotLightHelper } from './helpers/SpotLightHelper';
export { SkeletonHelper } from './helpers/SkeletonHelper';
export { PointLightHelper } from './helpers/PointLightHelper';
export { RectAreaLightHelper } from './helpers/RectAreaLightHelper';
export { HemisphereLightHelper } from './helpers/HemisphereLightHelper';
export { GridHelper } from './helpers/GridHelper';
export { PolarGridHelper } from './helpers/PolarGridHelper';
export { FaceNormalsHelper } from './helpers/FaceNormalsHelper';
export { DirectionalLightHelper } from './helpers/DirectionalLightHelper';
export { CameraHelper } from './helpers/CameraHelper';
export { BoxHelper } from './helpers/BoxHelper';
export { Box3Helper } from './helpers/Box3Helper';
export { PlaneHelper } from './helpers/PlaneHelper';
export { ArrowHelper } from './helpers/ArrowHelper';
export { AxesHelper } from './helpers/AxesHelper';
export * from './extras/curves/Curves';
export { Shape } from './extras/core/Shape';
export { Path } from './extras/core/Path';
export { ShapePath } from './extras/core/ShapePath';
export { Font } from './extras/core/Font';
export { CurvePath } from './extras/core/CurvePath';
export { Curve } from './extras/core/Curve';
export { ImageUtils } from './extras/ImageUtils';
export { ShapeUtils } from './extras/ShapeUtils';
//export { WebGLUtils } from './renderers/webgl/WebGLUtils';
export * from './constants';
export * from './Three.Legacy';
import './polyfills';
export {
WebGLMultisampleRenderTarget,
} from './renderers/WebGLMultisampleRenderTarget';
export { WebGLRenderTargetCube } from './renderers/WebGLRenderTargetCube';
export { WebGLRenderTarget } from './renderers/WebGLRenderTarget';
export { WebGLRenderer } from './renderers/WebGLRenderer';
export { ShaderLib } from './renderers/shaders/ShaderLib';
export { UniformsLib } from './renderers/shaders/UniformsLib';
export { UniformsUtils } from './renderers/shaders/UniformsUtils';
export { ShaderChunk } from './renderers/shaders/ShaderChunk';
export { FogExp2 } from './scenes/FogExp2';
export { Fog } from './scenes/Fog';
export { Scene } from './scenes/Scene';
export { Sprite } from './objects/Sprite';
export { LOD } from './objects/LOD';
export { SkinnedMesh } from './objects/SkinnedMesh';
export { Skeleton } from './objects/Skeleton';
export { Bone } from './objects/Bone';
export { Mesh } from './objects/Mesh';
export { LineSegments } from './objects/LineSegments';
export { LineLoop } from './objects/LineLoop';
export { Line } from './objects/Line';
export { Points } from './objects/Points';
export { Group } from './objects/Group';
export { VideoTexture } from './textures/VideoTexture';
export { DataTexture } from './textures/DataTexture';
export { DataTexture3D } from './textures/DataTexture3D';
export { CompressedTexture } from './textures/CompressedTexture';
export { CubeTexture } from './textures/CubeTexture';
export { CanvasTexture } from './textures/CanvasTexture';
export { DepthTexture } from './textures/DepthTexture';
export { Texture } from './textures/Texture';
export * from './geometries/Geometries';
export * from './materials/Materials';
export { AnimationLoader } from './loaders/AnimationLoader';
export { CompressedTextureLoader } from './loaders/CompressedTextureLoader';
export { DataTextureLoader } from './loaders/DataTextureLoader';
export { CubeTextureLoader } from './loaders/CubeTextureLoader';
export { TextureLoader } from './loaders/TextureLoader';
export { ObjectLoader } from './loaders/ObjectLoader';
export { MaterialLoader } from './loaders/MaterialLoader';
export { BufferGeometryLoader } from './loaders/BufferGeometryLoader';
export {
LoadingManager,
DefaultLoadingManager,
} from './loaders/LoadingManager';
export { ImageLoader } from './loaders/ImageLoader';
export { ImageBitmapLoader } from './loaders/ImageBitmapLoader';
export { FontLoader } from './loaders/FontLoader';
export { FileLoader } from './loaders/FileLoader';
export { Loader } from './loaders/Loader';
export { LoaderUtils } from './loaders/LoaderUtils';
export { Cache } from './loaders/Cache';
export { AudioLoader } from './loaders/AudioLoader';
export { SpotLightShadow } from './lights/SpotLightShadow';
export { SpotLight } from './lights/SpotLight';
export { PointLight } from './lights/PointLight';
export { RectAreaLight } from './lights/RectAreaLight';
export { HemisphereLight } from './lights/HemisphereLight';
export { DirectionalLightShadow } from './lights/DirectionalLightShadow';
export { DirectionalLight } from './lights/DirectionalLight';
export { AmbientLight } from './lights/AmbientLight';
export { LightShadow } from './lights/LightShadow';
export { Light } from './lights/Light';
export { StereoCamera } from './cameras/StereoCamera';
export { PerspectiveCamera } from './cameras/PerspectiveCamera';
export { OrthographicCamera } from './cameras/OrthographicCamera';
export { CubeCamera } from './cameras/CubeCamera';
export { ArrayCamera } from './cameras/ArrayCamera';
export { Camera } from './cameras/Camera';
export { AudioListener } from './audio/AudioListener';
export { PositionalAudio } from './audio/PositionalAudio';
export { AudioContext } from './audio/AudioContext';
export { AudioAnalyser } from './audio/AudioAnalyser';
export { Audio } from './audio/Audio';
export { VectorKeyframeTrack } from './animation/tracks/VectorKeyframeTrack';
export { StringKeyframeTrack } from './animation/tracks/StringKeyframeTrack';
export {
QuaternionKeyframeTrack,
} from './animation/tracks/QuaternionKeyframeTrack';
export { NumberKeyframeTrack } from './animation/tracks/NumberKeyframeTrack';
export { ColorKeyframeTrack } from './animation/tracks/ColorKeyframeTrack';
export { BooleanKeyframeTrack } from './animation/tracks/BooleanKeyframeTrack';
export { PropertyMixer } from './animation/PropertyMixer';
export { PropertyBinding } from './animation/PropertyBinding';
export { KeyframeTrack } from './animation/KeyframeTrack';
export { AnimationUtils } from './animation/AnimationUtils';
export { AnimationObjectGroup } from './animation/AnimationObjectGroup';
export { AnimationMixer } from './animation/AnimationMixer';
export { AnimationClip } from './animation/AnimationClip';
export { Uniform } from './core/Uniform';
export { InstancedBufferGeometry } from './core/InstancedBufferGeometry';
export { BufferGeometry } from './core/BufferGeometry';
export { Geometry } from './core/Geometry';
export { InterleavedBufferAttribute } from './core/InterleavedBufferAttribute';
export { InstancedInterleavedBuffer } from './core/InstancedInterleavedBuffer';
export { InterleavedBuffer } from './core/InterleavedBuffer';
export { InstancedBufferAttribute } from './core/InstancedBufferAttribute';
export * from './core/BufferAttribute';
export { Face3 } from './core/Face3';
export { Object3D } from './core/Object3D';
export { Raycaster } from './core/Raycaster';
export { Layers } from './core/Layers';
export { EventDispatcher } from './core/EventDispatcher';
export { Clock } from './core/Clock';
export {
QuaternionLinearInterpolant,
} from './math/interpolants/QuaternionLinearInterpolant';
export { LinearInterpolant } from './math/interpolants/LinearInterpolant';
export { DiscreteInterpolant } from './math/interpolants/DiscreteInterpolant';
export { CubicInterpolant } from './math/interpolants/CubicInterpolant';
export { Interpolant } from './math/Interpolant';
export { Triangle } from './math/Triangle';
export { _Math as Math } from './math/Math';
export { Spherical } from './math/Spherical';
export { Cylindrical } from './math/Cylindrical';
export { Plane } from './math/Plane';
export { Frustum } from './math/Frustum';
export { Sphere } from './math/Sphere';
export { Ray } from './math/Ray';
export { Matrix4 } from './math/Matrix4';
export { Matrix3 } from './math/Matrix3';
export { Box3 } from './math/Box3';
export { Box2 } from './math/Box2';
export { Line3 } from './math/Line3';
export { Euler } from './math/Euler';
export { Vector4 } from './math/Vector4';
export { Vector3 } from './math/Vector3';
export { Vector2 } from './math/Vector2';
export { Quaternion } from './math/Quaternion';
export { Color } from './math/Color';
export { ImmediateRenderObject } from './extras/objects/ImmediateRenderObject';
export { VertexNormalsHelper } from './helpers/VertexNormalsHelper';
export { SpotLightHelper } from './helpers/SpotLightHelper';
export { SkeletonHelper } from './helpers/SkeletonHelper';
export { PointLightHelper } from './helpers/PointLightHelper';
export { RectAreaLightHelper } from './helpers/RectAreaLightHelper';
export { HemisphereLightHelper } from './helpers/HemisphereLightHelper';
export { GridHelper } from './helpers/GridHelper';
export { PolarGridHelper } from './helpers/PolarGridHelper';
export { FaceNormalsHelper } from './helpers/FaceNormalsHelper';
export { DirectionalLightHelper } from './helpers/DirectionalLightHelper';
export { CameraHelper } from './helpers/CameraHelper';
export { BoxHelper } from './helpers/BoxHelper';
export { Box3Helper } from './helpers/Box3Helper';
export { PlaneHelper } from './helpers/PlaneHelper';
export { ArrowHelper } from './helpers/ArrowHelper';
export { AxesHelper } from './helpers/AxesHelper';
export * from './extras/curves/Curves';
export { Shape } from './extras/core/Shape';
export { Path } from './extras/core/Path';
export { ShapePath } from './extras/core/ShapePath';
export { Font } from './extras/core/Font';
export { CurvePath } from './extras/core/CurvePath';
export { Curve } from './extras/core/Curve';
export { ImageUtils } from './extras/ImageUtils';
export { ShapeUtils } from './extras/ShapeUtils';
//export { WebGLUtils } from './renderers/webgl/WebGLUtils';
export * from './constants';
export * from './Three.Legacy';
import { AnimationMixer } from './AnimationMixer';
import { AnimationClip } from './AnimationClip';
import { AnimationActionLoopStyles } from '../constants';
// Animation ////////////////////////////////////////////////////////////////////////////////////////
export class AnimationAction {
loop: boolean;
time: number;
timeScale: number;
weight: number;
repetitions: number;
paused: boolean;
enabled: boolean;
clampWhenFinished: boolean;
zeroSlopeAtStart: boolean;
zeroSlopeAtEnd: boolean;
play(): AnimationAction;
stop(): AnimationAction;
reset(): AnimationAction;
isRunning(): boolean;
startAt(time: number): AnimationAction;
setLoop(
mode: AnimationActionLoopStyles,
repetitions: number
): AnimationAction;
setEffectiveWeight(weight: number): AnimationAction;
getEffectiveWeight(): number;
fadeIn(duration: number): AnimationAction;
fadeOut(duration: number): AnimationAction;
crossFadeFrom(
fadeOutAction: AnimationAction,
duration: number,
warp: boolean
): AnimationAction;
crossFadeTo(
fadeInAction: AnimationAction,
duration: number,
warp: boolean
): AnimationAction;
stopFading(): AnimationAction;
setEffectiveTimeScale(timeScale: number): AnimationAction;
getEffectiveTimeScale(): number;
setDuration(duration: number): AnimationAction;
syncWith(action: AnimationAction): AnimationAction;
halt(duration: number): AnimationAction;
warp(
statTimeScale: number,
endTimeScale: number,
duration: number
): AnimationAction;
stopWarping(): AnimationAction;
getMixer(): AnimationMixer;
getClip(): AnimationClip;
getRoot(): any;
}
import { KeyframeTrack } from './KeyframeTrack';
import { Bone } from './../objects/Bone';
import { MorphTarget } from '../core/Geometry';
export class AnimationClip {
constructor(name?: string, duration?: number, tracks?: KeyframeTrack[]);
name: string;
tracks: KeyframeTrack[];
duration: number;
uuid: string;
results: any[];
resetDuration(): void;
trim(): AnimationClip;
optimize(): AnimationClip;
static CreateFromMorphTargetSequence(
name: string,
morphTargetSequence: MorphTarget[],
fps: number,
noLoop: boolean
): AnimationClip;
static findByName(clipArray: AnimationClip[], name: string): AnimationClip;
static CreateClipsFromMorphTargetSequences(
morphTargets: MorphTarget[],
fps: number,
noLoop: boolean
): AnimationClip[];
static parse(json: any): AnimationClip;
static parseAnimation(
animation: any,
bones: Bone[],
nodeName: string
): AnimationClip;
static toJSON(): any;
}
......@@ -445,6 +445,21 @@ Object.assign( AnimationClip.prototype, {
return this;
},
clone: function () {
var tracks = [];
for ( var i = 0; i < this.tracks.length; i ++ ) {
tracks.push( this.tracks[ i ].clone() );
}
return new AnimationClip( this.name, this.duration, tracks );
}
} );
......
import { AnimationClip } from './AnimationClip';
import { AnimationAction } from './AnimationAction';
import { EventDispatcher } from './../core/EventDispatcher';
export class AnimationMixer extends EventDispatcher {
constructor(root: any);
time: number;
timeScale: number;
clipAction(clip: AnimationClip, root?: any): AnimationAction;
existingAction(clip: AnimationClip, root?: any): AnimationAction;
stopAllAction(): AnimationMixer;
update(deltaTime: number): AnimationMixer;
getRoot(): any;
uncacheClip(clip: AnimationClip): void;
uncacheRoot(root: any): void;
uncacheAction(clip: AnimationClip, root?: any): void;
}
export class AnimationObjectGroup {
constructor(...args: any[]);
uuid: string;
stats: {
bindingsPerObject: number;
objects: {
total: number;
inUse: number;
};
};
add(...args: any[]): void;
remove(...args: any[]): void;
uncache(...args: any[]): void;
}
export namespace AnimationUtils {
export function arraySlice(array: any, from: number, to: number): any;
export function convertArray(array: any, type: any, forceClone: boolean): any;
export function isTypedArray(object: any): boolean;
export function getKeyFrameOrder(times: number): number[];
export function sortedArray(
values: any[],
stride: number,
order: number[]
): any[];
export function flattenJSON(
jsonKeys: string[],
times: any[],
values: any[],
valuePropertyName: string
): void;
}
import { DiscreteInterpolant } from './../math/interpolants/DiscreteInterpolant';
import { LinearInterpolant } from './../math/interpolants/LinearInterpolant';
import { CubicInterpolant } from './../math/interpolants/CubicInterpolant';
import { InterpolationModes } from '../constants';
export class KeyframeTrack {
constructor(
name: string,
times: any[],
values: any[],
interpolation?: InterpolationModes
);
name: string;
times: any[];
values: any[];
ValueTypeName: string;
TimeBufferType: Float32Array;
ValueBufferType: Float32Array;
DefaultInterpolation: InterpolationModes;
InterpolantFactoryMethodDiscrete(result: any): DiscreteInterpolant;
InterpolantFactoryMethodLinear(result: any): LinearInterpolant;
InterpolantFactoryMethodSmooth(result: any): CubicInterpolant;
setInterpolation(interpolation: InterpolationModes): void;
getInterpolation(): InterpolationModes;
getValuesize(): number;
shift(timeOffset: number): KeyframeTrack;
scale(timeScale: number): KeyframeTrack;
trim(startTime: number, endTime: number): KeyframeTrack;
validate(): boolean;
optimize(): KeyframeTrack;
static parse(json: any): KeyframeTrack;
static toJSON(track: KeyframeTrack): any;
}
......@@ -447,6 +447,21 @@ Object.assign( KeyframeTrack.prototype, {
return this;
},
clone: function () {
var times = AnimationUtils.arraySlice( this.times, 0 );
var values = AnimationUtils.arraySlice( this.values, 0 );
var TypedKeyframeTrack = this.constructor;
var track = new TypedKeyframeTrack( this.name, times, values );
// Interpolant argument to constructor is not saved, so copy the factory method directly.
track.createInterpolant = this.createInterpolant;
return track;
}
} );
......
export class PropertyBinding {
constructor(rootNode: any, path: string, parsedPath?: any);
path: string;
parsedPath: any;
node: any;
rootNode: any;
getValue(targetArray: any, offset: number): any;
setValue(sourceArray: any, offset: number): void;
bind(): void;
unbind(): void;
BindingType: { [bindingType: string]: number };
Versioning: { [versioning: string]: number };
GetterByBindingType: Function[];
SetterByBindingTypeAndVersioning: Array<Function[]>;
static create(
root: any,
path: any,
parsedPath?: any
): PropertyBinding | PropertyBinding.Composite;
static parseTrackName(trackName: string): any;
static findNode(root: any, nodeName: string): any;
}
export namespace PropertyBinding {
export class Composite {
constructor(targetGroup: any, path: any, parsedPath?: any);
getValue(array: any, offset: number): any;
setValue(array: any, offset: number): void;
bind(): void;
unbind(): void;
}
}
export class PropertyMixer {
constructor(binding: any, typeName: string, valueSize: number);
binding: any;
valueSize: number;
buffer: any;
cumulativeWeight: number;
useCount: number;
referenceCount: number;
accumulate(accuIndex: number, weight: number): void;
apply(accuIndex: number): void;
saveOriginalState(): void;
restoreOriginalState(): void;
}
import { KeyframeTrack } from './../KeyframeTrack';
export class BooleanKeyframeTrack extends KeyframeTrack {
constructor(name: string, times: any[], values: any[]);
}
import { KeyframeTrack } from './../KeyframeTrack';
import { InterpolationModes } from '../../constants';
export class ColorKeyframeTrack extends KeyframeTrack {
constructor(
name: string,
times: any[],
values: any[],
interpolation?: InterpolationModes
);
}
import { KeyframeTrack } from './../KeyframeTrack';
import { InterpolationModes } from '../../constants';
export class NumberKeyframeTrack extends KeyframeTrack {
constructor(
name: string,
times: any[],
values: any[],
interpolation?: InterpolationModes
);
}
import { KeyframeTrack } from './../KeyframeTrack';
import { InterpolationModes } from '../../constants';
export class QuaternionKeyframeTrack extends KeyframeTrack {
constructor(
name: string,
times: any[],
values: any[],
interpolation?: InterpolationModes
);
}
import { KeyframeTrack } from './../KeyframeTrack';
import { InterpolationModes } from '../../constants';
export class StringKeyframeTrack extends KeyframeTrack {
constructor(
name: string,
times: any[],
values: any[],
interpolation?: InterpolationModes
);
}
import { KeyframeTrack } from './../KeyframeTrack';
import { InterpolationModes } from '../../constants';
export class VectorKeyframeTrack extends KeyframeTrack {
constructor(
name: string,
times: any[],
values: any[],
interpolation?: InterpolationModes
);
}
import { Object3D } from './../core/Object3D';
import { AudioListener } from './AudioListener';
import { AudioContext } from './AudioContext';
// Extras / Audio /////////////////////////////////////////////////////////////////////
export class Audio extends Object3D {
constructor(listener: AudioListener);
type: 'Audio';
context: AudioContext;
gain: GainNode;
autoplay: boolean;
buffer: null | Audio;
loop: boolean;
startTime: number;
offset: number;
playbackRate: number;
isPlaying: boolean;
hasPlaybackControl: boolean;
sourceType: string;
source: AudioBufferSourceNode;
filters: any[];
getOutput(): GainNode;
setNodeSource(audioNode: AudioBufferSourceNode): this;
setMediaElementSource(mediaElement: MediaElementAudioSourceNode): this;
setBuffer(audioBuffer: AudioBuffer): this;
play(): this;
onEnded(): void;
pause(): this;
stop(): this;
connect(): this;
disconnect(): this;
getFilters(): any[];
setFilter(value: any[]): this;
getFilter(): any;
setFilter(filter: any): this;
setPlaybackRate(value: number): this;
getPlaybackRate(): number;
getLoop(): boolean;
setLoop(value: boolean): void;
getVolume(): number;
setVolume(value: number): this;
/**
* @deprecated Use {@link AudioLoader} instead.
*/
load(file: string): Audio;
}
......@@ -95,7 +95,7 @@ Audio.prototype = Object.assign( Object.create( Object3D.prototype ), {
var source = this.context.createBufferSource();
source.buffer = this.buffer;
source.detune.value = this.detune;
this.setDetune( this.detune );
source.loop = this.loop;
source.onended = this.onEnded.bind( this );
source.playbackRate.setValueAtTime( this.playbackRate, this.startTime );
......@@ -228,6 +228,13 @@ Audio.prototype = Object.assign( Object.create( Object3D.prototype ), {
this.detune = value;
if ( this.source.detune === undefined ) {
console.warn( 'THREE.Audio: AudioBufferSourceNode.detune not supported by the browser.' );
return;
}
if ( this.isPlaying === true ) {
this.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );
......
export class AudioAnalyser {
constructor(audio: any, fftSize: number);
analyser: any;
data: Uint8Array;
getFrequencyData(): Uint8Array;
getAverageFrequency(): number;
/**
* @deprecated Use {@link AudioAnalyser#getFrequencyData .getFrequencyData()} instead.
*/
getData(file: any): any;
}
export const AudioContext: AudioContext;
import { Object3D } from './../core/Object3D';
import { AudioContext } from './AudioContext';
export class AudioListener extends Object3D {
constructor();
type: 'AudioListener';
context: AudioContext;
gain: GainNode;
filter: null | any;
getInput(): GainNode;
removeFilter(): void;
setFilter(value: any): void;
getFilter(): any;
setMasterVolume(value: number): void;
getMasterVolume(): number;
updateMatrixWorld(force?: boolean): void;
}
import { AudioListener } from './AudioListener';
import { Audio } from './Audio';
export class AudioBuffer {
constructor(context: any);
context: any;
ready: boolean;
readyCallbacks: Function[];
load(file: string): AudioBuffer;
onReady(callback: Function): void;
}
export class PositionalAudio extends Audio {
constructor(listener: AudioListener);
panner: PannerNode;
setRefDistance(value: number): void;
getRefDistance(): number;
setRolloffFactor(value: number): void;
getRolloffFactor(): number;
setDistanceModel(value: number): void;
getDistanceModel(): number;
setMaxDistance(value: number): void;
getMaxDistance(): number;
}
import { PerspectiveCamera } from './PerspectiveCamera';
export class ArrayCamera extends PerspectiveCamera {
constructor(cameras?: PerspectiveCamera[]);
cameras: PerspectiveCamera[];
isArrayCamera: true;
}
import { Matrix4 } from './../math/Matrix4';
import { Vector3 } from './../math/Vector3';
import { Object3D } from './../core/Object3D';
// Cameras ////////////////////////////////////////////////////////////////////////////////////////
/**
* Abstract base class for cameras. This class should always be inherited when you build a new camera.
*/
export class Camera extends Object3D {
/**
* This constructor sets following properties to the correct type: matrixWorldInverse, projectionMatrix and projectionMatrixInverse.
*/
constructor();
/**
* This is the inverse of matrixWorld. MatrixWorld contains the Matrix which has the world transform of the Camera.
*/
matrixWorldInverse: Matrix4;
/**
* This is the matrix which contains the projection.
*/
projectionMatrix: Matrix4;
isCamera: true;
copy(source: Camera, recursive?: boolean): this;
getWorldDirection(target: Vector3): Vector3;
updateMatrixWorld(force: boolean): void;
}
import { WebGLRenderTargetCube } from './../renderers/WebGLRenderTargetCube';
import { Scene } from './../scenes/Scene';
import { WebGLRenderer } from './../renderers/WebGLRenderer';
import { Object3D } from './../core/Object3D';
export class CubeCamera extends Object3D {
constructor(near?: number, far?: number, cubeResolution?: number);
type: 'CubeCamera';
renderTarget: WebGLRenderTargetCube;
/**
* @deprecated Use {@link CubeCamera#update .update()} instead
*/
//updateCubeMap(renderer: Renderer, scene: Scene): void;
update(renderer: WebGLRenderer, scene: Scene): void;
}
import { Camera } from './Camera';
/**
* Camera with orthographic projection
*
* @example
* var camera = new THREE.OrthographicCamera( width / - 2, width / 2, height / 2, height / - 2, 1, 1000 );
* scene.add( camera );
*
* @see <a href="https://github.com/mrdoob/three.js/blob/master/src/cameras/OrthographicCamera.js">src/cameras/OrthographicCamera.js</a>
*/
export class OrthographicCamera extends Camera {
/**
* @param left Camera frustum left plane.
* @param right Camera frustum right plane.
* @param top Camera frustum top plane.
* @param bottom Camera frustum bottom plane.
* @param near Camera frustum near plane.
* @param far Camera frustum far plane.
*/
constructor(
left: number,
right: number,
top: number,
bottom: number,
near?: number,
far?: number
);
type: 'OrthographicCamera';
isOrthographicCamera: true;
zoom: number;
view: null | {
enabled: boolean;
fullWidth: number;
fullHeight: number;
offsetX: number;
offsetY: number;
width: number;
height: number;
};
/**
* Camera frustum left plane.
*/
left: number;
/**
* Camera frustum right plane.
*/
right: number;
/**
* Camera frustum top plane.
*/
top: number;
/**
* Camera frustum bottom plane.
*/
bottom: number;
/**
* Camera frustum near plane.
*/
near: number;
/**
* Camera frustum far plane.
*/
far: number;
/**
* Updates the camera projection matrix. Must be called after change of parameters.
*/
updateProjectionMatrix(): void;
setViewOffset(
fullWidth: number,
fullHeight: number,
offsetX: number,
offsetY: number,
width: number,
height: number
): void;
clearViewOffset(): void;
toJSON(meta?: any): any;
}
import { Camera } from './Camera';
/**
* Camera with perspective projection.
*
* # example
* var camera = new THREE.PerspectiveCamera( 45, width / height, 1, 1000 );
* scene.add( camera );
*
* @source https://github.com/mrdoob/three.js/blob/master/src/cameras/PerspectiveCamera.js
*/
export class PerspectiveCamera extends Camera {
/**
* @param fov Camera frustum vertical field of view. Default value is 50.
* @param aspect Camera frustum aspect ratio. Default value is 1.
* @param near Camera frustum near plane. Default value is 0.1.
* @param far Camera frustum far plane. Default value is 2000.
*/
constructor(fov?: number, aspect?: number, near?: number, far?: number);
type: 'PerspectiveCamera';
isPerspectiveCamera: true;
zoom: number;
/**
* Camera frustum vertical field of view, from bottom to top of view, in degrees.
*/
fov: number;
/**
* Camera frustum aspect ratio, window width divided by window height.
*/
aspect: number;
/**
* Camera frustum near plane.
*/
near: number;
/**
* Camera frustum far plane.
*/
far: number;
focus: number;
view: null | {
enabled: boolean;
fullWidth: number;
fullHeight: number;
offsetX: number;
offsetY: number;
width: number;
height: number;
};
filmGauge: number;
filmOffset: number;
setFocalLength(focalLength: number): void;
getFocalLength(): number;
getEffectiveFOV(): number;
getFilmWidth(): number;
getFilmHeight(): number;
/**
* Sets an offset in a larger frustum. This is useful for multi-window or multi-monitor/multi-machine setups.
* For example, if you have 3x2 monitors and each monitor is 1920x1080 and the monitors are in grid like this:
*
* +---+---+---+
* | A | B | C |
* +---+---+---+
* | D | E | F |
* +---+---+---+
*
* then for each monitor you would call it like this:
*
* var w = 1920;
* var h = 1080;
* var fullWidth = w * 3;
* var fullHeight = h * 2;
*
* // A
* camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );
* // B
* camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );
* // C
* camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );
* // D
* camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );
* // E
* camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );
* // F
* camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); Note there is no reason monitors have to be the same size or in a grid.
*
* @param fullWidth full width of multiview setup
* @param fullHeight full height of multiview setup
* @param x horizontal offset of subcamera
* @param y vertical offset of subcamera
* @param width width of subcamera
* @param height height of subcamera
*/
setViewOffset(
fullWidth: number,
fullHeight: number,
x: number,
y: number,
width: number,
height: number
): void;
clearViewOffset(): void;
/**
* Updates the camera projection matrix. Must be called after change of parameters.
*/
updateProjectionMatrix(): void;
toJSON(meta?: any): any;
/**
* @deprecated Use {@link PerspectiveCamera#setFocalLength .setFocalLength()} and {@link PerspectiveCamera#filmGauge .filmGauge} instead.
*/
setLens(focalLength: number, frameHeight?: number): void;
}
import { PerspectiveCamera } from './PerspectiveCamera';
import { Camera } from './Camera';
export class StereoCamera extends Camera {
constructor();
type: 'StereoCamera';
aspect: number;
eyeSep: number;
cameraL: PerspectiveCamera;
cameraR: PerspectiveCamera;
update(camera: PerspectiveCamera): void;
}
export const REVISION: string;
// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.button
export enum MOUSE {
LEFT,
MIDDLE,
RIGHT,
}
// GL STATE CONSTANTS
export enum CullFace {}
export const CullFaceNone: CullFace;
export const CullFaceBack: CullFace;
export const CullFaceFront: CullFace;
export const CullFaceFrontBack: CullFace;
export enum FrontFaceDirection {}
export const FrontFaceDirectionCW: FrontFaceDirection;
export const FrontFaceDirectionCCW: FrontFaceDirection;
// Shadowing Type
export enum ShadowMapType {}
export const BasicShadowMap: ShadowMapType;
export const PCFShadowMap: ShadowMapType;
export const PCFSoftShadowMap: ShadowMapType;
// MATERIAL CONSTANTS
// side
export enum Side {}
export const FrontSide: Side;
export const BackSide: Side;
export const DoubleSide: Side;
// shading
export enum Shading {}
export const FlatShading: Shading;
export const SmoothShading: Shading;
// colors
export enum Colors {}
export const NoColors: Colors;
export const FaceColors: Colors;
export const VertexColors: Colors;
// blending modes
export enum Blending {}
export const NoBlending: Blending;
export const NormalBlending: Blending;
export const AdditiveBlending: Blending;
export const SubtractiveBlending: Blending;
export const MultiplyBlending: Blending;
export const CustomBlending: Blending;
// custom blending equations
// (numbers start from 100 not to clash with other
// mappings to OpenGL constants defined in Texture.js)
export enum BlendingEquation {}
export const AddEquation: BlendingEquation;
export const SubtractEquation: BlendingEquation;
export const ReverseSubtractEquation: BlendingEquation;
export const MinEquation: BlendingEquation;
export const MaxEquation: BlendingEquation;
// custom blending destination factors
export enum BlendingDstFactor {}
export const ZeroFactor: BlendingDstFactor;
export const OneFactor: BlendingDstFactor;
export const SrcColorFactor: BlendingDstFactor;
export const OneMinusSrcColorFactor: BlendingDstFactor;
export const SrcAlphaFactor: BlendingDstFactor;
export const OneMinusSrcAlphaFactor: BlendingDstFactor;
export const DstAlphaFactor: BlendingDstFactor;
export const OneMinusDstAlphaFactor: BlendingDstFactor;
export const DstColorFactor: BlendingDstFactor;
export const OneMinusDstColorFactor: BlendingDstFactor;
// custom blending src factors
export enum BlendingSrcFactor {}
export const SrcAlphaSaturateFactor: BlendingSrcFactor;
// depth modes
export enum DepthModes {}
export const NeverDepth: DepthModes;
export const AlwaysDepth: DepthModes;
export const LessDepth: DepthModes;
export const LessEqualDepth: DepthModes;
export const EqualDepth: DepthModes;
export const GreaterEqualDepth: DepthModes;
export const GreaterDepth: DepthModes;
export const NotEqualDepth: DepthModes;
// TEXTURE CONSTANTS
// Operations
export enum Combine {}
export const MultiplyOperation: Combine;
export const MixOperation: Combine;
export const AddOperation: Combine;
// Tone Mapping modes
export enum ToneMapping {}
export const NoToneMapping: ToneMapping;
export const LinearToneMapping: ToneMapping;
export const ReinhardToneMapping: ToneMapping;
export const Uncharted2ToneMapping: ToneMapping;
export const CineonToneMapping: ToneMapping;
// Mapping modes
export enum Mapping {}
export const UVMapping: Mapping;
export const CubeReflectionMapping: Mapping;
export const CubeRefractionMapping: Mapping;
export const EquirectangularReflectionMapping: Mapping;
export const EquirectangularRefractionMapping: Mapping;
export const SphericalReflectionMapping: Mapping;
export const CubeUVReflectionMapping: Mapping;
export const CubeUVRefractionMapping: Mapping;
// Wrapping modes
export enum Wrapping {}
export const RepeatWrapping: Wrapping;
export const ClampToEdgeWrapping: Wrapping;
export const MirroredRepeatWrapping: Wrapping;
// Filters
export enum TextureFilter {}
export const NearestFilter: TextureFilter;
export const NearestMipMapNearestFilter: TextureFilter;
export const NearestMipMapLinearFilter: TextureFilter;
export const LinearFilter: TextureFilter;
export const LinearMipMapNearestFilter: TextureFilter;
export const LinearMipMapLinearFilter: TextureFilter;
// Data types
export enum TextureDataType {}
export const UnsignedByteType: TextureDataType;
export const ByteType: TextureDataType;
export const ShortType: TextureDataType;
export const UnsignedShortType: TextureDataType;
export const IntType: TextureDataType;
export const UnsignedIntType: TextureDataType;
export const FloatType: TextureDataType;
export const HalfFloatType: TextureDataType;
// Pixel types
export enum PixelType {}
export const UnsignedShort4444Type: PixelType;
export const UnsignedShort5551Type: PixelType;
export const UnsignedShort565Type: PixelType;
export const UnsignedInt248Type: PixelType;
// Pixel formats
export enum PixelFormat {}
export const AlphaFormat: PixelFormat;
export const RGBFormat: PixelFormat;
export const RGBAFormat: PixelFormat;
export const LuminanceFormat: PixelFormat;
export const LuminanceAlphaFormat: PixelFormat;
export const RGBEFormat: PixelFormat;
export const DepthFormat: PixelFormat;
export const DepthStencilFormat: PixelFormat;
export const RedFormat: PixelFormat;
// Compressed texture formats
// DDS / ST3C Compressed texture formats
export enum CompressedPixelFormat {}
export const RGB_S3TC_DXT1_Format: CompressedPixelFormat;
export const RGBA_S3TC_DXT1_Format: CompressedPixelFormat;
export const RGBA_S3TC_DXT3_Format: CompressedPixelFormat;
export const RGBA_S3TC_DXT5_Format: CompressedPixelFormat;
// PVRTC compressed './texture formats
export const RGB_PVRTC_4BPPV1_Format: CompressedPixelFormat;
export const RGB_PVRTC_2BPPV1_Format: CompressedPixelFormat;
export const RGBA_PVRTC_4BPPV1_Format: CompressedPixelFormat;
export const RGBA_PVRTC_2BPPV1_Format: CompressedPixelFormat;
// ETC compressed texture formats
export const RGB_ETC1_Format: CompressedPixelFormat;
// ASTC compressed texture formats
export const RGBA_ASTC_4x4_Format: CompressedPixelFormat;
export const RGBA_ASTC_5x4_Format: CompressedPixelFormat;
export const RGBA_ASTC_5x5_Format: CompressedPixelFormat;
export const RGBA_ASTC_6x5_Format: CompressedPixelFormat;
export const RGBA_ASTC_6x6_Format: CompressedPixelFormat;
export const RGBA_ASTC_8x5_Format: CompressedPixelFormat;
export const RGBA_ASTC_8x6_Format: CompressedPixelFormat;
export const RGBA_ASTC_8x8_Format: CompressedPixelFormat;
export const RGBA_ASTC_10x5_Format: CompressedPixelFormat;
export const RGBA_ASTC_10x6_Format: CompressedPixelFormat;
export const RGBA_ASTC_10x8_Format: CompressedPixelFormat;
export const RGBA_ASTC_10x10_Format: CompressedPixelFormat;
export const RGBA_ASTC_12x10_Format: CompressedPixelFormat;
export const RGBA_ASTC_12x12_Format: CompressedPixelFormat;
// Loop styles for AnimationAction
export enum AnimationActionLoopStyles {}
export const LoopOnce: AnimationActionLoopStyles;
export const LoopRepeat: AnimationActionLoopStyles;
export const LoopPingPong: AnimationActionLoopStyles;
// Interpolation
export enum InterpolationModes {}
export const InterpolateDiscrete: InterpolationModes;
export const InterpolateLinear: InterpolationModes;
export const InterpolateSmooth: InterpolationModes;
// Interpolant ending modes
export enum InterpolationEndingModes {}
export const ZeroCurvatureEnding: InterpolationEndingModes;
export const ZeroSlopeEnding: InterpolationEndingModes;
export const WrapAroundEnding: InterpolationEndingModes;
// Triangle Draw modes
export enum TrianglesDrawModes {}
export const TrianglesDrawMode: TrianglesDrawModes;
export const TriangleStripDrawMode: TrianglesDrawModes;
export const TriangleFanDrawMode: TrianglesDrawModes;
// Texture Encodings
export enum TextureEncoding {}
export const LinearEncoding: TextureEncoding;
export const sRGBEncoding: TextureEncoding;
export const GammaEncoding: TextureEncoding;
export const RGBEEncoding: TextureEncoding;
export const LogLuvEncoding: TextureEncoding;
export const RGBM7Encoding: TextureEncoding;
export const RGBM16Encoding: TextureEncoding;
export const RGBDEncoding: TextureEncoding;
// Depth packing strategies
export enum DepthPackingStrategies {}
export const BasicDepthPacking: DepthPackingStrategies;
export const RGBADepthPacking: DepthPackingStrategies;
/**
* @see <a href="https://github.com/mrdoob/three.js/blob/master/src/core/BufferAttribute.js">src/core/BufferAttribute.js</a>
*/
export class BufferAttribute {
constructor(array: ArrayLike<number>, itemSize: number, normalized?: boolean); // array parameter should be TypedArray.
uuid: string;
array: ArrayLike<number>;
itemSize: number;
dynamic: boolean;
updateRange: { offset: number; count: number };
version: number;
normalized: boolean;
needsUpdate: boolean;
count: number;
onUpload: Function;
setArray(array?: ArrayBufferView): void;
setDynamic(dynamic: boolean): BufferAttribute;
clone(): this;
copy(source: BufferAttribute): this;
copyAt(
index1: number,
attribute: BufferAttribute,
index2: number
): BufferAttribute;
copyArray(array: ArrayLike<number>): BufferAttribute;
copyColorsArray(
colors: { r: number; g: number; b: number }[]
): BufferAttribute;
copyVector2sArray(vectors: { x: number; y: number }[]): BufferAttribute;
copyVector3sArray(
vectors: { x: number; y: number; z: number }[]
): BufferAttribute;
copyVector4sArray(
vectors: { x: number; y: number; z: number; w: number }[]
): BufferAttribute;
set(
value: ArrayLike<number> | ArrayBufferView,
offset?: number
): BufferAttribute;
getX(index: number): number;
setX(index: number, x: number): BufferAttribute;
getY(index: number): number;
setY(index: number, y: number): BufferAttribute;
getZ(index: number): number;
setZ(index: number, z: number): BufferAttribute;
getW(index: number): number;
setW(index: number, z: number): BufferAttribute;
setXY(index: number, x: number, y: number): BufferAttribute;
setXYZ(index: number, x: number, y: number, z: number): BufferAttribute;
setXYZW(
index: number,
x: number,
y: number,
z: number,
w: number
): BufferAttribute;
/**
* @deprecated Use {@link BufferAttribute#count .count} instead.
*/
length: number;
}
/**
* @deprecated THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.
*/
export class Int8Attribute extends BufferAttribute {
constructor(array: any, itemSize: number);
}
/**
* @deprecated THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.
*/
export class Uint8Attribute extends BufferAttribute {
constructor(array: any, itemSize: number);
}
/**
* @deprecated THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.
*/
export class Uint8ClampedAttribute extends BufferAttribute {
constructor(array: any, itemSize: number);
}
/**
* @deprecated THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.
*/
export class Int16Attribute extends BufferAttribute {
constructor(array: any, itemSize: number);
}
/**
* @deprecated THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.
*/
export class Uint16Attribute extends BufferAttribute {
constructor(array: any, itemSize: number);
}
/**
* @deprecated THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.
*/
export class Int32Attribute extends BufferAttribute {
constructor(array: any, itemSize: number);
}
/**
* @deprecated THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.
*/
export class Uint32Attribute extends BufferAttribute {
constructor(array: any, itemSize: number);
}
/**
* @deprecated THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.
*/
export class Float32Attribute extends BufferAttribute {
constructor(array: any, itemSize: number);
}
/**
* @deprecated THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.
*/
export class Float64Attribute extends BufferAttribute {
constructor(array: any, itemSize: number);
}
export class Int8BufferAttribute extends BufferAttribute {
constructor(
array: Iterable<number> | ArrayLike<number> | ArrayBuffer,
itemSize: number,
normalized?: boolean
);
}
export class Uint8BufferAttribute extends BufferAttribute {
constructor(
array: Iterable<number> | ArrayLike<number> | ArrayBuffer,
itemSize: number,
normalized?: boolean
);
}
export class Uint8ClampedBufferAttribute extends BufferAttribute {
constructor(
array: Iterable<number> | ArrayLike<number> | ArrayBuffer,
itemSize: number,
normalized?: boolean
);
}
export class Int16BufferAttribute extends BufferAttribute {
constructor(
array: Iterable<number> | ArrayLike<number> | ArrayBuffer,
itemSize: number,
normalized?: boolean
);
}
export class Uint16BufferAttribute extends BufferAttribute {
constructor(
array: Iterable<number> | ArrayLike<number> | ArrayBuffer,
itemSize: number,
normalized?: boolean
);
}
export class Int32BufferAttribute extends BufferAttribute {
constructor(
array: Iterable<number> | ArrayLike<number> | ArrayBuffer,
itemSize: number,
normalized?: boolean
);
}
export class Uint32BufferAttribute extends BufferAttribute {
constructor(
array: Iterable<number> | ArrayLike<number> | ArrayBuffer,
itemSize: number,
normalized?: boolean
);
}
export class Float32BufferAttribute extends BufferAttribute {
constructor(
array: Iterable<number> | ArrayLike<number> | ArrayBuffer,
itemSize: number,
normalized?: boolean
);
}
export class Float64BufferAttribute extends BufferAttribute {
constructor(
array: Iterable<number> | ArrayLike<number> | ArrayBuffer,
itemSize: number,
normalized?: boolean
);
}
import { BufferAttribute } from './BufferAttribute';
import { Box3 } from './../math/Box3';
import { Sphere } from './../math/Sphere';
import { Matrix4 } from './../math/Matrix4';
import { Vector2 } from './../math/Vector2';
import { Vector3 } from './../math/Vector3';
import { Object3D } from './Object3D';
import { Geometry } from './Geometry';
import { DirectGeometry } from './DirectGeometry';
import { EventDispatcher } from './EventDispatcher';
import { InterleavedBufferAttribute } from './InterleavedBufferAttribute';
/**
* @deprecated Use {@link BufferAttribute#setDynamic THREE.BufferAttribute().setDynamic( true )} instead.
*/
/**
* This is a superefficent class for geometries because it saves all data in buffers.
* It reduces memory costs and cpu cycles. But it is not as easy to work with because of all the nessecary buffer calculations.
* It is mainly interesting when working with static objects.
*
* @see <a href="https://github.com/mrdoob/three.js/blob/master/src/core/BufferGeometry.js">src/core/BufferGeometry.js</a>
*/
export class BufferGeometry extends EventDispatcher {
/**
* This creates a new BufferGeometry. It also sets several properties to an default value.
*/
constructor();
static MaxIndex: number;
/**
* Unique number of this buffergeometry instance
*/
id: number;
uuid: string;
name: string;
type: string;
index: BufferAttribute;
attributes: {
[name: string]: BufferAttribute | InterleavedBufferAttribute;
};
morphAttributes: any;
groups: { start: number; count: number; materialIndex?: number }[];
boundingBox: Box3;
boundingSphere: Sphere;
drawRange: { start: number; count: number };
getIndex(): BufferAttribute;
setIndex(index: BufferAttribute | number[]): void;
addAttribute(
name: string,
attribute: BufferAttribute | InterleavedBufferAttribute
): BufferGeometry;
getAttribute(name: string): BufferAttribute | InterleavedBufferAttribute;
removeAttribute(name: string): BufferGeometry;
addGroup(start: number, count: number, materialIndex?: number): void;
clearGroups(): void;
setDrawRange(start: number, count: number): void;
/**
* Bakes matrix transform directly into vertex coordinates.
*/
applyMatrix(matrix: Matrix4): BufferGeometry;
rotateX(angle: number): BufferGeometry;
rotateY(angle: number): BufferGeometry;
rotateZ(angle: number): BufferGeometry;
translate(x: number, y: number, z: number): BufferGeometry;
scale(x: number, y: number, z: number): BufferGeometry;
lookAt(v: Vector3): void;
center(): BufferGeometry;
setFromObject(object: Object3D): BufferGeometry;
setFromPoints(points: Vector3[] | Vector2[]): BufferGeometry;
updateFromObject(object: Object3D): void;
fromGeometry(geometry: Geometry, settings?: any): BufferGeometry;
fromDirectGeometry(geometry: DirectGeometry): BufferGeometry;
/**
* Computes bounding box of the geometry, updating Geometry.boundingBox attribute.
* Bounding boxes aren't computed by default. They need to be explicitly computed, otherwise they are null.
*/
computeBoundingBox(): void;
/**
* Computes bounding sphere of the geometry, updating Geometry.boundingSphere attribute.
* Bounding spheres aren't' computed by default. They need to be explicitly computed, otherwise they are null.
*/
computeBoundingSphere(): void;
/**
* Computes vertex normals by averaging face normals.
*/
computeVertexNormals(): void;
merge(geometry: BufferGeometry, offset: number): BufferGeometry;
normalizeNormals(): void;
toNonIndexed(): BufferGeometry;
toJSON(): any;
clone(): this;
copy(source: BufferGeometry): this;
/**
* Disposes the object from memory.
* You need to call this when you want the bufferGeometry removed while the application is running.
*/
dispose(): void;
/**
* @deprecated Use {@link BufferGeometry#groups .groups} instead.
*/
drawcalls: any;
/**
* @deprecated Use {@link BufferGeometry#groups .groups} instead.
*/
offsets: any;
/**
* @deprecated Use {@link BufferGeometry#setIndex .setIndex()} instead.
*/
addIndex(index: any): void;
/**
* @deprecated Use {@link BufferGeometry#addGroup .addGroup()} instead.
*/
addDrawCall(start: any, count: any, indexOffset?: any): void;
/**
* @deprecated Use {@link BufferGeometry#clearGroups .clearGroups()} instead.
*/
clearDrawCalls(): void;
addAttribute(name: any, array: any, itemSize: any): any;
}
/**
* Object for keeping track of time.
*
* @see <a href="https://github.com/mrdoob/three.js/blob/master/src/core/Clock.js">src/core/Clock.js</a>
*/
export class Clock {
/**
* @param autoStart Automatically start the clock.
*/
constructor(autoStart?: boolean);
/**
* If set, starts the clock automatically when the first update is called.
*/
autoStart: boolean;
/**
* When the clock is running, It holds the starttime of the clock.
* This counted from the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC.
*/
startTime: number;
/**
* When the clock is running, It holds the previous time from a update.
* This counted from the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC.
*/
oldTime: number;
/**
* When the clock is running, It holds the time elapsed between the start of the clock to the previous update.
* This parameter is in seconds of three decimal places.
*/
elapsedTime: number;
/**
* This property keeps track whether the clock is running or not.
*/
running: boolean;
/**
* Starts clock.
*/
start(): void;
/**
* Stops clock.
*/
stop(): void;
/**
* Get the seconds passed since the clock started.
*/
getElapsedTime(): number;
/**
* Get the seconds passed since the last call to this method.
*/
getDelta(): number;
}
import { Vector3 } from './../math/Vector3';
import { Color } from './../math/Color';
import { Vector2 } from './../math/Vector2';
import { Vector4 } from './../math/Vector4';
import { Box3 } from './../math/Box3';
import { Sphere } from './../math/Sphere';
import { Geometry } from './Geometry';
import { Event } from './Face3';
import { EventDispatcher } from './EventDispatcher';
import { MorphTarget } from './Geometry';
/**
* @see <a href="https://github.com/mrdoob/three.js/blob/master/src/core/DirectGeometry.js">src/core/DirectGeometry.js</a>
*/
export class DirectGeometry extends EventDispatcher {
constructor();
id: number;
uuid: string;
name: string;
type: string;
indices: number[];
vertices: Vector3[];
normals: Vector3[];
colors: Color[];
uvs: Vector2[];
uvs2: Vector2[];
groups: { start: number; materialIndex: number }[];
morphTargets: MorphTarget[];
skinWeights: Vector4[];
skinIndices: Vector4[];
boundingBox: Box3;
boundingSphere: Sphere;
verticesNeedUpdate: boolean;
normalsNeedUpdate: boolean;
colorsNeedUpdate: boolean;
uvsNeedUpdate: boolean;
groupsNeedUpdate: boolean;
computeBoundingBox(): void;
computeBoundingSphere(): void;
computeGroups(geometry: Geometry): void;
fromGeometry(geometry: Geometry): DirectGeometry;
dispose(): void;
// EventDispatcher mixins
addEventListener(type: string, listener: (event: Event) => void): void;
hasEventListener(type: string, listener: (event: Event) => void): boolean;
removeEventListener(type: string, listener: (event: Event) => void): void;
dispatchEvent(event: { type: string; [attachment: string]: any }): void;
}
import { Event } from './Face3';
/**
* JavaScript events for custom objects
*
* # Example
* var Car = function () {
*
* EventDispatcher.call( this );
* this.start = function () {
*
* this.dispatchEvent( { type: 'start', message: 'vroom vroom!' } );
*
* };
*
* };
*
* var car = new Car();
* car.addEventListener( 'start', function ( event ) {
*
* alert( event.message );
*
* } );
* car.start();
*
* @source src/core/EventDispatcher.js
*/
export class EventDispatcher {
/**
* Creates eventDispatcher object. It needs to be call with '.call' to add the functionality to an object.
*/
constructor();
/**
* Adds a listener to an event type.
* @param type The type of event to listen to.
* @param listener The function that gets called when the event is fired.
*/
addEventListener(type: string, listener: (event: Event) => void): void;
/**
* Checks if listener is added to an event type.
* @param type The type of event to listen to.
* @param listener The function that gets called when the event is fired.
*/
hasEventListener(type: string, listener: (event: Event) => void): boolean;
/**
* Removes a listener from an event type.
* @param type The type of the listener that gets removed.
* @param listener The listener function that gets removed.
*/
removeEventListener(type: string, listener: (event: Event) => void): void;
/**
* Fire an event type.
* @param type The type of event that gets fired.
*/
dispatchEvent(event: { type: string; [attachment: string]: any }): void;
}
import { Vector3 } from './../math/Vector3';
import { Color } from './../math/Color';
export interface Event {
type: string;
target?: any;
[attachment: string]: any;
}
/**
* Triangle face.
*
* # Example
* var normal = new THREE.Vector3( 0, 1, 0 );
* var color = new THREE.Color( 0xffaa00 );
* var face = new THREE.Face3( 0, 1, 2, normal, color, 0 );
*
* @source https://github.com/mrdoob/three.js/blob/master/src/core/Face3.js
*/
export class Face3 {
/**
* @param a Vertex A index.
* @param b Vertex B index.
* @param c Vertex C index.
* @param normal Face normal or array of vertex normals.
* @param color Face color or array of vertex colors.
* @param materialIndex Material index.
*/
constructor(
a: number,
b: number,
c: number,
normal?: Vector3,
color?: Color,
materialIndex?: number
);
constructor(
a: number,
b: number,
c: number,
normal?: Vector3,
vertexColors?: Color[],
materialIndex?: number
);
constructor(
a: number,
b: number,
c: number,
vertexNormals?: Vector3[],
color?: Color,
materialIndex?: number
);
constructor(
a: number,
b: number,
c: number,
vertexNormals?: Vector3[],
vertexColors?: Color[],
materialIndex?: number
);
/**
* Vertex A index.
*/
a: number;
/**
* Vertex B index.
*/
b: number;
/**
* Vertex C index.
*/
c: number;
/**
* Face normal.
*/
normal: Vector3;
/**
* Array of 4 vertex normals.
*/
vertexNormals: Vector3[];
/**
* Face color.
*/
color: Color;
/**
* Array of 4 vertex normals.
*/
vertexColors: Color[];
/**
* Material index (points to {@link Geometry.materials}).
*/
materialIndex: number;
clone(): this;
copy(source: Face3): this;
}
import { Vector3 } from './../math/Vector3';
import { Color } from './../math/Color';
import { Face3, Event } from './Face3';
import { Vector2 } from './../math/Vector2';
import { Vector4 } from './../math/Vector4';
import { Box3 } from './../math/Box3';
import { Sphere } from './../math/Sphere';
import { Matrix4 } from './../math/Matrix4';
import { BufferGeometry } from './BufferGeometry';
import { Matrix } from './../math/Matrix3';
import { Mesh } from './../objects/Mesh';
import { Bone } from './../objects/Bone';
import { AnimationClip } from './../animation/AnimationClip';
import { EventDispatcher } from './EventDispatcher';
/**
* @deprecated Use {@link Face3} instead.
*/
export interface MorphTarget {
name: string;
vertices: Vector3[];
}
export interface MorphColor {
name: string;
colors: Color[];
}
export interface MorphNormals {
name: string;
normals: Vector3[];
}
export let GeometryIdCount: number;
/**
* Base class for geometries
*
* # Example
* var geometry = new THREE.Geometry();
* geometry.vertices.push( new THREE.Vector3( -10, 10, 0 ) );
* geometry.vertices.push( new THREE.Vector3( -10, -10, 0 ) );
* geometry.vertices.push( new THREE.Vector3( 10, -10, 0 ) );
* geometry.faces.push( new THREE.Face3( 0, 1, 2 ) );
* geometry.computeBoundingSphere();
*
* @see https://github.com/mrdoob/three.js/blob/master/src/core/Geometry.js
*/
export class Geometry extends EventDispatcher {
constructor();
/**
* Unique number of this geometry instance
*/
id: number;
uuid: string;
/**
* Name for this geometry. Default is an empty string.
*/
name: string;
type: string;
/**
* The array of vertices hold every position of points of the model.
* To signal an update in this array, Geometry.verticesNeedUpdate needs to be set to true.
*/
vertices: Vector3[];
/**
* Array of vertex colors, matching number and order of vertices.
* Used in ParticleSystem, Line and Ribbon.
* Meshes use per-face-use-of-vertex colors embedded directly in faces.
* To signal an update in this array, Geometry.colorsNeedUpdate needs to be set to true.
*/
colors: Color[];
/**
* Array of triangles or/and quads.
* The array of faces describe how each vertex in the model is connected with each other.
* To signal an update in this array, Geometry.elementsNeedUpdate needs to be set to true.
*/
faces: Face3[];
/**
* Array of face UV layers.
* Each UV layer is an array of UV matching order and number of vertices in faces.
* To signal an update in this array, Geometry.uvsNeedUpdate needs to be set to true.
*/
faceVertexUvs: Vector2[][][];
/**
* Array of morph targets. Each morph target is a Javascript object:
*
* { name: "targetName", vertices: [ new THREE.Vector3(), ... ] }
*
* Morph vertices match number and order of primary vertices.
*/
morphTargets: MorphTarget[];
/**
* Array of morph normals. Morph normals have similar structure as morph targets, each normal set is a Javascript object:
*
* morphNormal = { name: "NormalName", normals: [ new THREE.Vector3(), ... ] }
*/
morphNormals: MorphNormals[];
/**
* Array of skinning weights, matching number and order of vertices.
*/
skinWeights: Vector4[];
/**
* Array of skinning indices, matching number and order of vertices.
*/
skinIndices: Vector4[];
/**
*
*/
lineDistances: number[];
/**
* Bounding box.
*/
boundingBox: Box3;
/**
* Bounding sphere.
*/
boundingSphere: Sphere;
/**
* Set to true if the vertices array has been updated.
*/
verticesNeedUpdate: boolean;
/**
* Set to true if the faces array has been updated.
*/
elementsNeedUpdate: boolean;
/**
* Set to true if the uvs array has been updated.
*/
uvsNeedUpdate: boolean;
/**
* Set to true if the normals array has been updated.
*/
normalsNeedUpdate: boolean;
/**
* Set to true if the colors array has been updated.
*/
colorsNeedUpdate: boolean;
/**
* Set to true if the linedistances array has been updated.
*/
lineDistancesNeedUpdate: boolean;
/**
*
*/
groupsNeedUpdate: boolean;
/**
* Bakes matrix transform directly into vertex coordinates.
*/
applyMatrix(matrix: Matrix4): Geometry;
rotateX(angle: number): Geometry;
rotateY(angle: number): Geometry;
rotateZ(angle: number): Geometry;
translate(x: number, y: number, z: number): Geometry;
scale(x: number, y: number, z: number): Geometry;
lookAt(vector: Vector3): void;
fromBufferGeometry(geometry: BufferGeometry): Geometry;
center(): Geometry;
normalize(): Geometry;
/**
* Computes face normals.
*/
computeFaceNormals(): void;
/**
* Computes vertex normals by averaging face normals.
* Face normals must be existing / computed beforehand.
*/
computeVertexNormals(areaWeighted?: boolean): void;
/**
* Compute vertex normals, but duplicating face normals.
*/
computeFlatVertexNormals(): void;
/**
* Computes morph normals.
*/
computeMorphNormals(): void;
/**
* Computes bounding box of the geometry, updating {@link Geometry.boundingBox} attribute.
*/
computeBoundingBox(): void;
/**
* Computes bounding sphere of the geometry, updating Geometry.boundingSphere attribute.
* Neither bounding boxes or bounding spheres are computed by default. They need to be explicitly computed, otherwise they are null.
*/
computeBoundingSphere(): void;
merge(
geometry: Geometry,
matrix?: Matrix,
materialIndexOffset?: number
): void;
mergeMesh(mesh: Mesh): void;
/**
* Checks for duplicate vertices using hashmap.
* Duplicated vertices are removed and faces' vertices are updated.
*/
mergeVertices(): number;
setFromPoints(points: Array<Vector2> | Array<Vector3>): this;
sortFacesByMaterialIndex(): void;
toJSON(): any;
/**
* Creates a new clone of the Geometry.
*/
clone(): this;
copy(source: Geometry): this;
/**
* Removes The object from memory.
* Don't forget to call this method when you remove an geometry because it can cuase meomory leaks.
*/
dispose(): void;
// These properties do not exist in a normal Geometry class, but if you use the instance that was passed by JSONLoader, it will be added.
bones: Bone[];
animation: AnimationClip;
animations: AnimationClip[];
// EventDispatcher mixins
addEventListener(type: string, listener: (event: Event) => void): void;
hasEventListener(type: string, listener: (event: Event) => void): boolean;
removeEventListener(type: string, listener: (event: Event) => void): void;
dispatchEvent(event: { type: string; [attachment: string]: any }): void;
}
import { BufferGeometry } from './BufferGeometry';
import { BufferAttribute } from './BufferAttribute';
/**
* @see <a href="https://github.com/mrdoob/three.js/blob/master/examples/js/BufferGeometryUtils.js">examples/js/BufferGeometryUtils.js</a>
*/
export namespace BufferGeometryUtils {
export function mergeBufferGeometries(
geometries: BufferGeometry[]
): BufferGeometry;
export function computeTangents(geometry: BufferGeometry): null;
export function mergeBufferAttributes(
attributes: BufferAttribute[]
): BufferAttribute;
}
/**
* @deprecated
*/
export namespace GeometryUtils {
/**
* @deprecated Use {@link Geometry#merge geometry.merge( geometry2, matrix, materialIndexOffset )} instead.
*/
export function merge(
geometry1: any,
geometry2: any,
materialIndexOffset?: any
): any;
/**
* @deprecated Use {@link Geometry#center geometry.center()} instead.
*/
export function center(geometry: any): any;
}
/**
* @see <a href="https://github.com/mrdoob/three.js/blob/master/src/core/InstancedBufferAttribute.js">src/core/InstancedBufferAttribute.js</a>
*/
export class InstancedBufferAttribute extends BufferAttribute {
constructor(
data: ArrayLike<number>,
itemSize: number,
meshPerAttribute?: number
);
meshPerAttribute: number;
}
import { BufferGeometry } from './BufferGeometry';
/**
* @see <a href="https://github.com/mrdoob/three.js/blob/master/src/core/InstancedBufferGeometry.js">src/core/InstancedBufferGeometry.js</a>
*/
export class InstancedBufferGeometry extends BufferGeometry {
constructor();
groups: { start: number; count: number; instances: number }[];
maxInstancedCount: number;
addGroup(start: number, count: number, instances: number): void;
}
import { InterleavedBuffer } from './InterleavedBuffer';
/**
* @see <a href="https://github.com/mrdoob/three.js/blob/master/src/core/InstancedInterleavedBuffer.js">src/core/InstancedInterleavedBuffer.js</a>
*/
export class InstancedInterleavedBuffer extends InterleavedBuffer {
constructor(
array: ArrayLike<number>,
stride: number,
meshPerAttribute?: number
);
meshPerAttribute: number;
}
import { InterleavedBufferAttribute } from './InterleavedBufferAttribute';
/**
* @see <a href="https://github.com/mrdoob/three.js/blob/master/src/core/InterleavedBuffer.js">src/core/InterleavedBuffer.js</a>
*/
export class InterleavedBuffer {
constructor(array: ArrayLike<number>, stride: number);
array: ArrayLike<number>;
stride: number;
dynamic: boolean;
updateRange: { offset: number; count: number };
version: number;
length: number;
count: number;
needsUpdate: boolean;
setArray(array?: ArrayBufferView): void;
setDynamic(dynamic: boolean): InterleavedBuffer;
clone(): this;
copy(source: InterleavedBuffer): this;
copyAt(
index1: number,
attribute: InterleavedBufferAttribute,
index2: number
): InterleavedBuffer;
set(value: ArrayLike<number>, index: number): InterleavedBuffer;
}
import { InterleavedBuffer } from './InterleavedBuffer';
/**
* @see <a href="https://github.com/mrdoob/three.js/blob/master/src/core/InterleavedBufferAttribute.js">src/core/InterleavedBufferAttribute.js</a>
*/
export class InterleavedBufferAttribute {
constructor(
interleavedBuffer: InterleavedBuffer,
itemSize: number,
offset: number,
normalized?: boolean
);
uuid: string;
data: InterleavedBuffer;
itemSize: number;
offset: number;
count: number;
normalized: boolean;
array: any[];
getX(index: number): number;
setX(index: number, x: number): InterleavedBufferAttribute;
getY(index: number): number;
setY(index: number, y: number): InterleavedBufferAttribute;
getZ(index: number): number;
setZ(index: number, z: number): InterleavedBufferAttribute;
getW(index: number): number;
setW(index: number, z: number): InterleavedBufferAttribute;
setXY(index: number, x: number, y: number): InterleavedBufferAttribute;
setXYZ(
index: number,
x: number,
y: number,
z: number
): InterleavedBufferAttribute;
setXYZW(
index: number,
x: number,
y: number,
z: number,
w: number
): InterleavedBufferAttribute;
/**
* @deprecated Use {@link InterleavedBufferAttribute#count .count} instead.
*/
length: number;
}
export class Layers {
constructor();
mask: number;
set(channel: number): void;
enable(channel: number): void;
toggle(channel: number): void;
disable(channel: number): void;
test(layers: Layers): boolean;
}
import { Vector3 } from './../math/Vector3';
import { Euler } from './../math/Euler';
import { Quaternion } from './../math/Quaternion';
import { Matrix4 } from './../math/Matrix4';
import { Matrix3 } from './../math/Matrix3';
import { Layers } from './Layers';
import { WebGLRenderer } from './../renderers/WebGLRenderer';
import { Scene } from './../scenes/Scene';
import { Camera } from './../cameras/Camera';
import { Geometry } from './Geometry';
import { Material } from './../materials/Material';
import { Group } from './../objects/Group';
import { Raycaster } from './Raycaster';
import { EventDispatcher } from './EventDispatcher';
import { BufferGeometry } from './BufferGeometry';
import { Intersection } from './Raycaster';
export let Object3DIdCount: number;
/**
* Base class for scene graph objects
*/
export class Object3D extends EventDispatcher {
constructor();
/**
* Unique number of this object instance.
*/
id: number;
/**
*
*/
uuid: string;
/**
* Optional name of the object (doesn't need to be unique).
*/
name: string;
type: string;
/**
* Object's parent in the scene graph.
*/
parent: Object3D | null;
/**
* Array with object's children.
*/
children: Object3D[];
/**
* Up direction.
*/
up: Vector3;
/**
* Object's local position.
*/
position: Vector3;
/**
* Object's local rotation (Euler angles), in radians.
*/
rotation: Euler;
/**
* Global rotation.
*/
quaternion: Quaternion;
/**
* Object's local scale.
*/
scale: Vector3;
modelViewMatrix: Matrix4;
normalMatrix: Matrix3;
/**
* Local transform.
*/
matrix: Matrix4;
/**
* The global transform of the object. If the Object3d has no parent, then it's identical to the local transform.
*/
matrixWorld: Matrix4;
/**
* When this is set, it calculates the matrix of position, (rotation or quaternion) and scale every frame and also recalculates the matrixWorld property.
*/
matrixAutoUpdate: boolean;
/**
* When this is set, it calculates the matrixWorld in that frame and resets this property to false.
*/
matrixWorldNeedsUpdate: boolean;
layers: Layers;
/**
* Object gets rendered if true.
*/
visible: boolean;
/**
* Gets rendered into shadow map.
*/
castShadow: boolean;
/**
* Material gets baked in shadow receiving.
*/
receiveShadow: boolean;
/**
* When this is set, it checks every frame if the object is in the frustum of the camera. Otherwise the object gets drawn every frame even if it isn't visible.
*/
frustumCulled: boolean;
renderOrder: number;
/**
* An object that can be used to store custom data about the Object3d. It should not hold references to functions as these will not be cloned.
*/
userData: { [key: string]: any };
/**
* Used to check whether this or derived classes are Object3Ds. Default is true.
* You should not change this, as it is used internally for optimisation.
*/
isObject3D: true;
/**
* Calls before rendering object
*/
onBeforeRender: (
renderer: WebGLRenderer,
scene: Scene,
camera: Camera,
geometry: Geometry | BufferGeometry,
material: Material,
group: Group
) => void;
/**
* Calls after rendering object
*/
onAfterRender: (
renderer: WebGLRenderer,
scene: Scene,
camera: Camera,
geometry: Geometry | BufferGeometry,
material: Material,
group: Group
) => void;
static DefaultUp: Vector3;
static DefaultMatrixAutoUpdate: boolean;
/**
* This updates the position, rotation and scale with the matrix.
*/
applyMatrix(matrix: Matrix4): void;
applyQuaternion(quaternion: Quaternion): this;
/**
*
*/
setRotationFromAxisAngle(axis: Vector3, angle: number): void;
/**
*
*/
setRotationFromEuler(euler: Euler): void;
/**
*
*/
setRotationFromMatrix(m: Matrix4): void;
/**
*
*/
setRotationFromQuaternion(q: Quaternion): void;
/**
* Rotate an object along an axis in object space. The axis is assumed to be normalized.
* @param axis A normalized vector in object space.
* @param angle The angle in radians.
*/
rotateOnAxis(axis: Vector3, angle: number): this;
/**
* Rotate an object along an axis in world space. The axis is assumed to be normalized. Method Assumes no rotated parent.
* @param axis A normalized vector in object space.
* @param angle The angle in radians.
*/
rotateOnWorldAxis(axis: Vector3, angle: number): this;
/**
*
* @param angle
*/
rotateX(angle: number): this;
/**
*
* @param angle
*/
rotateY(angle: number): this;
/**
*
* @param angle
*/
rotateZ(angle: number): this;
/**
* @param axis A normalized vector in object space.
* @param distance The distance to translate.
*/
translateOnAxis(axis: Vector3, distance: number): this;
/**
* Translates object along x axis by distance.
* @param distance Distance.
*/
translateX(distance: number): this;
/**
* Translates object along y axis by distance.
* @param distance Distance.
*/
translateY(distance: number): this;
/**
* Translates object along z axis by distance.
* @param distance Distance.
*/
translateZ(distance: number): this;
/**
* Updates the vector from local space to world space.
* @param vector A local vector.
*/
localToWorld(vector: Vector3): Vector3;
/**
* Updates the vector from world space to local space.
* @param vector A world vector.
*/
worldToLocal(vector: Vector3): Vector3;
/**
* Rotates object to face point in space.
* @param vector A world vector to look at.
*/
lookAt(vector: Vector3 | number, y?: number, z?: number): void;
/**
* Adds object as child of this object.
*/
add(...object: Object3D[]): this;
/**
* Removes object as child of this object.
*/
remove(...object: Object3D[]): this;
/**
* Searches through the object's children and returns the first with a matching id.
* @param id Unique number of the object instance
*/
getObjectById(id: number): Object3D | undefined;
/**
* Searches through the object's children and returns the first with a matching name.
* @param name String to match to the children's Object3d.name property.
*/
getObjectByName(name: string): Object3D | undefined;
getObjectByProperty(name: string, value: string): Object3D | undefined;
getWorldPosition(target: Vector3): Vector3;
getWorldQuaternion(target: Quaternion): Quaternion;
getWorldScale(target: Vector3): Vector3;
getWorldDirection(target: Vector3): Vector3;
raycast(raycaster: Raycaster, intersects: Intersection[]): void;
traverse(callback: (object: Object3D) => any): void;
traverseVisible(callback: (object: Object3D) => any): void;
traverseAncestors(callback: (object: Object3D) => any): void;
/**
* Updates local transform.
*/
updateMatrix(): void;
/**
* Updates global transform of the object and its children.
*/
updateMatrixWorld(force: boolean): void;
toJSON(meta?: {
geometries: any;
materials: any;
textures: any;
images: any;
}): any;
clone(recursive?: boolean): this;
/**
*
* @param object
* @param recursive
*/
copy(source: Object3D, recursive?: boolean): this;
}
import { Vector3 } from './../math/Vector3';
import { Face3 } from './Face3';
import { Object3D } from './Object3D';
import { Vector2 } from './../math/Vector2';
import { Ray } from './../math/Ray';
import { Camera } from './../cameras/Camera';
export interface Intersection {
distance: number;
distanceToRay?: number;
point: Vector3;
index?: number;
face?: Face3 | null;
faceIndex?: number;
object: Object3D;
uv?: Vector2;
}
export interface RaycasterParameters {
Mesh?: any;
Line?: any;
LOD?: any;
Points?: { threshold: number };
Sprite?: any;
}
export class Raycaster {
/**
* This creates a new raycaster object.
* @param origin The origin vector where the ray casts from.
* @param direction The direction vector that gives direction to the ray. Should be normalized.
* @param near All results returned are further away than near. Near can't be negative. Default value is 0.
* @param far All results returned are closer then far. Far can't be lower then near . Default value is Infinity.
*/
constructor(
origin?: Vector3,
direction?: Vector3,
near?: number,
far?: number
);
/** The Ray used for the raycasting. */
ray: Ray;
/**
* The near factor of the raycaster. This value indicates which objects can be discarded based on the
* distance. This value shouldn't be negative and should be smaller than the far property.
*/
near: number;
/**
* The far factor of the raycaster. This value indicates which objects can be discarded based on the
* distance. This value shouldn't be negative and should be larger than the near property.
*/
far: number;
params: RaycasterParameters;
/**
* The precision factor of the raycaster when intersecting Line objects.
*/
linePrecision: number;
/**
* Updates the ray with a new origin and direction.
* @param origin The origin vector where the ray casts from.
* @param direction The normalized direction vector that gives direction to the ray.
*/
set(origin: Vector3, direction: Vector3): void;
/**
* Updates the ray with a new origin and direction.
* @param coords 2D coordinates of the mouse, in normalized device coordinates (NDC)---X and Y components should be between -1 and 1.
* @param camera camera from which the ray should originate
*/
setFromCamera(coords: { x: number; y: number }, camera: Camera): void;
/**
* Checks all intersection between the ray and the object with or without the descendants. Intersections are returned sorted by distance, closest first.
* @param object The object to check for intersection with the ray.
* @param recursive If true, it also checks all descendants. Otherwise it only checks intersecton with the object. Default is false.
* @param optionalTarget (optional) target to set the result. Otherwise a new Array is instantiated. If set, you must clear this array prior to each call (i.e., array.length = 0;).
*/
intersectObject(
object: Object3D,
recursive?: boolean,
optionalTarget?: Intersection[]
): Intersection[];
/**
* Checks all intersection between the ray and the objects with or without the descendants. Intersections are returned sorted by distance, closest first. Intersections are of the same form as those returned by .intersectObject.
* @param objects The objects to check for intersection with the ray.
* @param recursive If true, it also checks all descendants of the objects. Otherwise it only checks intersecton with the objects. Default is false.
* @param optionalTarget (optional) target to set the result. Otherwise a new Array is instantiated. If set, you must clear this array prior to each call (i.e., array.length = 0;).
*/
intersectObjects(
objects: Object3D[],
recursive?: boolean,
optionalTarget?: Intersection[]
): Intersection[];
}
export class Uniform {
constructor(value: any);
/**
* @deprecated
*/
constructor(type: string, value: any);
/**
* @deprecated
*/
type: string;
value: any;
/**
* @deprecated Use {@link Object3D#onBeforeRender object.onBeforeRender()} instead.
*/
dynamic: boolean;
onUpdateCallback: Function;
/**
* @deprecated Use {@link Object3D#onBeforeRender object.onBeforeRender()} instead.
*/
onUpdate(callback: Function): Uniform;
}
import { Mapping } from '../constants';
import { Texture } from '../textures/Texture';
// Extras /////////////////////////////////////////////////////////////////////
/**
* @deprecated Use {@link TextureLoader} instead.
*/
export namespace ImageUtils {
/**
* @deprecated
*/
export let crossOrigin: string;
/**
* @deprecated Use {@link TextureLoader THREE.TextureLoader()} instead.
*/
export function loadTexture(
url: string,
mapping?: Mapping,
onLoad?: (texture: Texture) => void,
onError?: (message: string) => void
): Texture;
/**
* @deprecated Use {@link CubeTextureLoader THREE.CubeTextureLoader()} instead.
*/
export function loadTextureCube(
array: string[],
mapping?: Mapping,
onLoad?: (texture: Texture) => void,
onError?: (message: string) => void
): Texture;
}
interface Vec2 {
x: number;
y: number;
}
export namespace ShapeUtils {
export function area(contour: Vec2[]): number;
export function triangulate(contour: Vec2[], indices: boolean): number[];
export function triangulateShape(contour: Vec2[], holes: Vec2[]): number[][];
export function isClockWise(pts: Vec2[]): boolean;
}
import { Vector } from './../../math/Vector2';
// Extras / Core /////////////////////////////////////////////////////////////////////
/**
* An extensible curve object which contains methods for interpolation
* class Curve&lt;T extends Vector&gt;
*/
export class Curve<T extends Vector> {
/**
* This value determines the amount of divisions when calculating the cumulative segment lengths of a curve via .getLengths.
* To ensure precision when using methods like .getSpacedPoints, it is recommended to increase .arcLengthDivisions if the curve is very large.
* Default is 200.
*/
arcLengthDivisions: number;
/**
* Returns a vector for point t of the curve where t is between 0 and 1
* getPoint(t: number): T;
*/
getPoint(t: number, optionalTarget?: T): T;
/**
* Returns a vector for point at relative position in curve according to arc length
* getPointAt(u: number): T;
*/
getPointAt(u: number, optionalTarget?: T): T;
/**
* Get sequence of points using getPoint( t )
* getPoints(divisions?: number): T[];
*/
getPoints(divisions?: number): T[];
/**
* Get sequence of equi-spaced points using getPointAt( u )
* getSpacedPoints(divisions?: number): T[];
*/
getSpacedPoints(divisions?: number): T[];
/**
* Get total curve arc length
*/
getLength(): number;
/**
* Get list of cumulative segment lengths
*/
getLengths(divisions?: number): number[];
/**
* Update the cumlative segment distance cache
*/
updateArcLengths(): void;
/**
* Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equi distance
*/
getUtoTmapping(u: number, distance: number): number;
/**
* Returns a unit vector tangent at t. If the subclassed curve do not implement its tangent derivation, 2 points a small delta apart will be used to find its gradient which seems to give a reasonable approximation
* getTangent(t: number): T;
*/
getTangent(t: number): T;
/**
* Returns tangent at equidistance point u on the curve
* getTangentAt(u: number): T;
*/
getTangentAt(u: number): T;
/**
* @deprecated since r84.
*/
static create(constructorFunc: Function, getPointFunc: Function): Function;
}
import { Curve } from './Curve';
import { Geometry } from './../../core/Geometry';
import { Vector } from './../../math/Vector2';
export class CurvePath<T extends Vector> extends Curve<T> {
constructor();
curves: Curve<T>[];
autoClose: boolean;
add(curve: Curve<T>): void;
checkConnection(): boolean;
closePath(): void;
getPoint(t: number): T;
getLength(): number;
updateArcLengths(): void;
getCurveLengths(): number[];
getSpacedPoints(divisions?: number): T[];
getPoints(divisions?: number): T[];
/**
* @deprecated Use {@link Geometry#setFromPoints new THREE.Geometry().setFromPoints( points )} instead.
*/
createPointsGeometry(divisions: number): Geometry;
/**
* @deprecated Use {@link Geometry#setFromPoints new THREE.Geometry().setFromPoints( points )} instead.
*/
createSpacedPointsGeometry(divisions: number): Geometry;
/**
* @deprecated Use {@link Geometry#setFromPoints new THREE.Geometry().setFromPoints( points )} instead.
*/
createGeometry(points: T[]): Geometry;
}
export class Font {
constructor(jsondata: any);
data: string;
generateShapes(text: string, size: number, divisions: number): any[];
}
import { Vector2 } from './../../math/Vector2';
import { CurvePath } from './CurvePath';
export enum PathActions {
MOVE_TO,
LINE_TO,
QUADRATIC_CURVE_TO, // Bezier quadratic curve
BEZIER_CURVE_TO, // Bezier cubic curve
CSPLINE_THRU, // Catmull-rom spline
ARC, // Circle
ELLIPSE,
}
export interface PathAction {
action: PathActions;
args: any;
}
/**
* a 2d path representation, comprising of points, lines, and cubes, similar to the html5 2d canvas api. It extends CurvePath.
*/
export class Path extends CurvePath<Vector2> {
constructor(points?: Vector2[]);
currentPoint: Vector2;
/**
* @deprecated Use {@link Path#setFromPoints .setFromPoints()} instead.
*/
fromPoints(vectors: Vector2[]): void;
setFromPoints(vectors: Vector2[]): void;
moveTo(x: number, y: number): void;
lineTo(x: number, y: number): void;
quadraticCurveTo(aCPx: number, aCPy: number, aX: number, aY: number): void;
bezierCurveTo(
aCP1x: number,
aCP1y: number,
aCP2x: number,
aCP2y: number,
aX: number,
aY: number
): void;
splineThru(pts: Vector2[]): void;
arc(
aX: number,
aY: number,
aRadius: number,
aStartAngle: number,
aEndAngle: number,
aClockwise: boolean
): void;
absarc(
aX: number,
aY: number,
aRadius: number,
aStartAngle: number,
aEndAngle: number,
aClockwise: boolean
): void;
ellipse(
aX: number,
aY: number,
xRadius: number,
yRadius: number,
aStartAngle: number,
aEndAngle: number,
aClockwise: boolean,
aRotation: number
): void;
absellipse(
aX: number,
aY: number,
xRadius: number,
yRadius: number,
aStartAngle: number,
aEndAngle: number,
aClockwise: boolean,
aRotation: number
): void;
}
import { Vector2 } from './../../math/Vector2';
import { Path } from './Path';
import { ExtrudeGeometry } from './../../geometries/ExtrudeGeometry';
import { ShapeGeometry } from './../../geometries/ShapeGeometry';
/**
* Defines a 2d shape plane using paths.
*/
export class Shape extends Path {
constructor(points?: Vector2[]);
holes: Path[];
/**
* @deprecated Use {@link ExtrudeGeometry ExtrudeGeometry()} instead.
*/
extrude(options?: any): ExtrudeGeometry;
/**
* @deprecated Use {@link ShapeGeometry ShapeGeometry()} instead.
*/
makeGeometry(options?: any): ShapeGeometry;
getPointsHoles(divisions: number): Vector2[][];
/**
* @deprecated Use {@link Shape#extractPoints .extractPoints()} instead.
*/
extractAllPoints(
divisions: number
): {
shape: Vector2[];
holes: Vector2[][];
};
extractPoints(divisions: number): Vector2[];
}
import { Vector2 } from './../../math/Vector2';
import { Shape } from './Shape';
export class ShapePath {
constructor();
subPaths: any[];
currentPath: any;
moveTo(x: number, y: number): void;
lineTo(x: number, y: number): void;
quadraticCurveTo(aCPx: number, aCPy: number, aX: number, aY: number): void;
bezierCurveTo(
aCP1x: number,
aCP1y: number,
aCP2x: number,
aCP2y: number,
aX: number,
aY: number
): void;
splineThru(pts: Vector2[]): void;
toShapes(isCCW: boolean, noHoles: any): Shape[];
}
import { EllipseCurve } from './EllipseCurve';
export class ArcCurve extends EllipseCurve {
constructor(
aX: number,
aY: number,
aRadius: number,
aStartAngle: number,
aEndAngle: number,
aClockwise: boolean
);
}
import { Vector3 } from './../../math/Vector3';
import { Curve } from './../core/Curve';
// Extras / Curves /////////////////////////////////////////////////////////////////////
export namespace CurveUtils {
export function tangentQuadraticBezier(
t: number,
p0: number,
p1: number,
p2: number
): number;
export function tangentCubicBezier(
t: number,
p0: number,
p1: number,
p2: number,
p3: number
): number;
export function tangentSpline(
t: number,
p0: number,
p1: number,
p2: number,
p3: number
): number;
export function interpolate(
p0: number,
p1: number,
p2: number,
p3: number,
t: number
): number;
}
export class CatmullRomCurve3 extends Curve<Vector3> {
constructor(
points?: Vector3[],
closed?: boolean,
curveType?: string,
tension?: number
);
points: Vector3[];
getPoint(t: number): Vector3;
}
import { Vector2 } from './../../math/Vector2';
import { Curve } from './../core/Curve';
export class CubicBezierCurve extends Curve<Vector2> {
constructor(v0: Vector2, v1: Vector2, v2: Vector2, v3: Vector2);
v0: Vector2;
v1: Vector2;
v2: Vector2;
v3: Vector2;
}
import { Vector3 } from './../../math/Vector3';
import { Curve } from './../core/Curve';
export class CubicBezierCurve3 extends Curve<Vector3> {
constructor(v0: Vector3, v1: Vector3, v2: Vector3, v3: Vector3);
v0: Vector3;
v1: Vector3;
v2: Vector3;
v3: Vector3;
getPoint(t: number): Vector3;
}
export { ArcCurve } from './ArcCurve';
export { CatmullRomCurve3 } from './CatmullRomCurve3';
export { CubicBezierCurve } from './CubicBezierCurve';
export { CubicBezierCurve3 } from './CubicBezierCurve3';
export { EllipseCurve } from './EllipseCurve';
export { LineCurve } from './LineCurve';
export { LineCurve3 } from './LineCurve3';
export { QuadraticBezierCurve } from './QuadraticBezierCurve';
export { QuadraticBezierCurve3 } from './QuadraticBezierCurve3';
export { SplineCurve } from './SplineCurve';
import { Curve } from './../core/Curve';
import { Vector2 } from '../../math/Vector2';
export class EllipseCurve extends Curve<Vector2> {
constructor(
aX: number,
aY: number,
xRadius: number,
yRadius: number,
aStartAngle: number,
aEndAngle: number,
aClockwise: boolean,
aRotation: number
);
aX: number;
aY: number;
xRadius: number;
yRadius: number;
aStartAngle: number;
aEndAngle: number;
aClockwise: boolean;
aRotation: number;
}
import { Vector2 } from './../../math/Vector2';
import { Curve } from './../core/Curve';
export class LineCurve extends Curve<Vector2> {
constructor(v1: Vector2, v2: Vector2);
v1: Vector2;
v2: Vector2;
}
import { Vector3 } from './../../math/Vector3';
import { Curve } from './../core/Curve';
export class LineCurve3 extends Curve<Vector3> {
constructor(v1: Vector3, v2: Vector3);
v1: Vector3;
v2: Vector3;
getPoint(t: number): Vector3;
}
import { Vector2 } from './../../math/Vector2';
import { Curve } from './../core/Curve';
export class QuadraticBezierCurve extends Curve<Vector2> {
constructor(v0: Vector2, v1: Vector2, v2: Vector2);
v0: Vector2;
v1: Vector2;
v2: Vector2;
}
import { Vector3 } from './../../math/Vector3';
import { Curve } from './../core/Curve';
export class QuadraticBezierCurve3 extends Curve<Vector3> {
constructor(v0: Vector3, v1: Vector3, v2: Vector3);
v0: Vector3;
v1: Vector3;
v2: Vector3;
getPoint(t: number): Vector3;
}
import { Vector2 } from './../../math/Vector2';
import { Curve } from './../core/Curve';
export class SplineCurve extends Curve<Vector2> {
constructor(points?: Vector2[]);
points: Vector2[];
}
import { Object3D } from './../../core/Object3D';
import { Material } from './../../materials/Material';
/**
* @deprecated Use {@link WireframeGeometry THREE.WireframeGeometry} instead.
*/
// export class WireframeHelper extends LineSegments {
// constructor(object: Object3D, hex?: number);
// }
// Extras / Objects /////////////////////////////////////////////////////////////////////
export class ImmediateRenderObject extends Object3D {
constructor(material: Material);
material: Material;
render(renderCallback: Function): void;
}
import { Geometry } from '../core/Geometry';
import { BufferGeometry } from '../core/BufferGeometry';
import { Float32BufferAttribute } from '../core/BufferAttribute';
import { Vector3 } from '../math/Vector3';
// Extras / Geometries /////////////////////////////////////////////////////////////////////
export class BoxBufferGeometry extends BufferGeometry {
constructor(
width?: number,
height?: number,
depth?: number,
widthSegments?: number,
heightSegments?: number,
depthSegments?: number
);
parameters: {
width: number;
height: number;
depth: number;
widthSegments: number;
heightSegments: number;
depthSegments: number;
};
}
/**
* BoxGeometry is the quadrilateral primitive geometry class. It is typically used for creating a cube or irregular quadrilateral of the dimensions provided within the (optional) 'width', 'height', & 'depth' constructor arguments.
*/
export class BoxGeometry extends Geometry {
/**
* @param width — Width of the sides on the X axis.
* @param height — Height of the sides on the Y axis.
* @param depth — Depth of the sides on the Z axis.
* @param widthSegments — Number of segmented faces along the width of the sides.
* @param heightSegments — Number of segmented faces along the height of the sides.
* @param depthSegments — Number of segmented faces along the depth of the sides.
*/
constructor(
width?: number,
height?: number,
depth?: number,
widthSegments?: number,
heightSegments?: number,
depthSegments?: number
);
parameters: {
width: number;
height: number;
depth: number;
widthSegments: number;
heightSegments: number;
depthSegments: number;
};
}
import { Geometry } from './../core/Geometry';
import { BufferGeometry } from '../core/BufferGeometry';
/**
* @deprecated Use {@link BoxGeometry} instead.
*/
export class CircleBufferGeometry extends BufferGeometry {
constructor(
radius?: number,
segments?: number,
thetaStart?: number,
thetaLength?: number
);
parameters: {
radius: number;
segments: number;
thetaStart: number;
thetaLength: number;
};
}
export class CircleGeometry extends Geometry {
constructor(
radius?: number,
segments?: number,
thetaStart?: number,
thetaLength?: number
);
parameters: {
radius: number;
segments: number;
thetaStart: number;
thetaLength: number;
};
}
import { CylinderGeometry } from './CylinderGeometry';
import { CylinderBufferGeometry } from './CylinderGeometry';
import { BufferGeometry } from '../core/BufferGeometry';
export class ConeBufferGeometry extends BufferGeometry {
constructor(
radius?: number,
height?: number,
radialSegment?: number,
heightSegment?: number,
openEnded?: boolean,
thetaStart?: number,
thetaLength?: number
);
}
export class ConeGeometry extends CylinderGeometry {
constructor(
radius?: number,
height?: number,
radialSegment?: number,
heightSegment?: number,
openEnded?: boolean,
thetaStart?: number,
thetaLength?: number
);
}
import { Geometry } from './../core/Geometry';
import { BufferGeometry } from '../core/BufferGeometry';
export class CylinderBufferGeometry extends BufferGeometry {
constructor(
radiusTop?: number,
radiusBottom?: number,
height?: number,
radialSegments?: number,
heightSegments?: number,
openEnded?: boolean,
thetaStart?: number,
thetaLength?: number
);
parameters: {
radiusTop: number;
radiusBottom: number;
height: number;
radialSegments: number;
heightSegments: number;
openEnded: boolean;
thetaStart: number;
thetaLength: number;
};
}
export class CylinderGeometry extends Geometry {
/**
* @param radiusTop — Radius of the cylinder at the top.
* @param radiusBottom — Radius of the cylinder at the bottom.
* @param height — Height of the cylinder.
* @param radiusSegments — Number of segmented faces around the circumference of the cylinder.
* @param heightSegments — Number of rows of faces along the height of the cylinder.
* @param openEnded - A Boolean indicating whether or not to cap the ends of the cylinder.
*/
constructor(
radiusTop?: number,
radiusBottom?: number,
height?: number,
radiusSegments?: number,
heightSegments?: number,
openEnded?: boolean,
thetaStart?: number,
thetaLength?: number
);
parameters: {
radiusTop: number;
radiusBottom: number;
height: number;
radialSegments: number;
heightSegments: number;
openEnded: boolean;
thetaStart: number;
thetaLength: number;
};
}
import { Geometry } from './../core/Geometry';
import { PolyhedronBufferGeometry } from './PolyhedronGeometry';
export class DodecahedronBufferGeometry extends PolyhedronBufferGeometry {
constructor(radius?: number, detail?: number);
}
export class DodecahedronGeometry extends Geometry {
constructor(radius?: number, detail?: number);
parameters: {
radius: number;
detail: number;
};
}
import { BufferGeometry } from '../core/BufferGeometry';
import { Geometry } from '../core/Geometry';
export class EdgesGeometry extends BufferGeometry {
constructor(geometry: BufferGeometry | Geometry, thresholdAngle?: number);
}
import { CurvePath } from './../extras/core/CurvePath';
import { UVGenerator } from './ExtrudeGeometry';
import { Vector2 } from './../math/Vector2';
import { Vector3 } from './../math/Vector3';
import { Shape } from './../extras/core/Shape';
import { Geometry } from './../core/Geometry';
import { BufferGeometry } from './../core/BufferGeometry';
export interface ExtrudeGeometryOptions {
curveSegments?: number;
steps?: number;
depth?: number;
bevelEnabled?: boolean;
bevelThickness?: number;
bevelSize?: number;
bevelSegments?: number;
extrudePath?: CurvePath<Vector3>;
UVGenerator?: UVGenerator;
}
export interface UVGenerator {
generateTopUV(
geometry: ExtrudeBufferGeometry,
vertices: number[],
indexA: number,
indexB: number,
indexC: number
): Vector2[];
generateSideWallUV(
geometry: ExtrudeBufferGeometry,
vertices: number[],
indexA: number,
indexB: number,
indexC: number,
indexD: number
): Vector2[];
}
export class ExtrudeBufferGeometry extends BufferGeometry {
constructor(shapes: Shape | Shape[], options?: ExtrudeGeometryOptions);
static WorldUVGenerator: UVGenerator;
addShapeList(shapes: Shape[], options?: any): void;
addShape(shape: Shape, options?: any): void;
}
export class ExtrudeGeometry extends Geometry {
constructor(shapes: Shape | Shape[], options?: ExtrudeGeometryOptions);
static WorldUVGenerator: UVGenerator;
addShapeList(shapes: Shape[], options?: any): void;
addShape(shape: Shape, options?: any): void;
}
export { WireframeGeometry } from './WireframeGeometry';
export {
ParametricGeometry,
ParametricBufferGeometry,
} from './ParametricGeometry';
export {
TetrahedronGeometry,
TetrahedronBufferGeometry,
} from './TetrahedronGeometry';
export {
OctahedronGeometry,
OctahedronBufferGeometry,
} from './OctahedronGeometry';
export {
IcosahedronGeometry,
IcosahedronBufferGeometry,
} from './IcosahedronGeometry';
export {
DodecahedronGeometry,
DodecahedronBufferGeometry,
} from './DodecahedronGeometry';
export {
PolyhedronGeometry,
PolyhedronBufferGeometry,
} from './PolyhedronGeometry';
export { TubeGeometry, TubeBufferGeometry } from './TubeGeometry';
export {
TorusKnotGeometry,
TorusKnotBufferGeometry,
} from './TorusKnotGeometry';
export { TorusGeometry, TorusBufferGeometry } from './TorusGeometry';
export { TextGeometry, TextBufferGeometry } from './TextGeometry';
export { SphereGeometry, SphereBufferGeometry } from './SphereGeometry';
export { RingGeometry, RingBufferGeometry } from './RingGeometry';
export { PlaneGeometry, PlaneBufferGeometry } from './PlaneGeometry';
export { LatheGeometry, LatheBufferGeometry } from './LatheGeometry';
export { ShapeGeometry, ShapeBufferGeometry } from './ShapeGeometry';
export { ExtrudeGeometry, ExtrudeBufferGeometry } from './ExtrudeGeometry';
export { EdgesGeometry } from './EdgesGeometry';
export { ConeGeometry, ConeBufferGeometry } from './ConeGeometry';
export { CylinderGeometry, CylinderBufferGeometry } from './CylinderGeometry';
export { CircleGeometry, CircleBufferGeometry } from './CircleGeometry';
export { BoxGeometry, BoxBufferGeometry } from './BoxGeometry';
import { Shape } from './../extras/core/Shape';
import { UVGenerator } from './ExtrudeGeometry';
import {
PolyhedronGeometry,
PolyhedronBufferGeometry,
} from './PolyhedronGeometry';
export class IcosahedronBufferGeometry extends PolyhedronBufferGeometry {
constructor(radius?: number, detail?: number);
}
export class IcosahedronGeometry extends PolyhedronGeometry {
constructor(radius?: number, detail?: number);
}
import { Vector2 } from './../math/Vector2';
import { Geometry } from './../core/Geometry';
import { BufferGeometry } from './../core/BufferGeometry';
export class LatheBufferGeometry extends BufferGeometry {
constructor(
points: Vector2[],
segments?: number,
phiStart?: number,
phiLength?: number
);
parameters: {
points: Vector2[];
segments: number;
phiStart: number;
phiLength: number;
};
}
export class LatheGeometry extends Geometry {
constructor(
points: Vector2[],
segments?: number,
phiStart?: number,
phiLength?: number
);
parameters: {
points: Vector2[];
segments: number;
phiStart: number;
phiLength: number;
};
}
import {
PolyhedronGeometry,
PolyhedronBufferGeometry,
} from './PolyhedronGeometry';
export class OctahedronBufferGeometry extends PolyhedronBufferGeometry {
constructor(radius?: number, detail?: number);
}
export class OctahedronGeometry extends PolyhedronGeometry {
constructor(radius?: number, detail?: number);
}
import { Vector3 } from './../math/Vector3';
import { Geometry } from './../core/Geometry';
import { BufferGeometry } from './../core/BufferGeometry';
export class ParametricBufferGeometry extends BufferGeometry {
constructor(
func: (u: number, v: number, dest: Vector3) => void,
slices: number,
stacks: number
);
parameters: {
func: (u: number, v: number, dest: Vector3) => void;
slices: number;
stacks: number;
};
}
export class ParametricGeometry extends Geometry {
constructor(
func: (u: number, v: number, dest: Vector3) => void,
slices: number,
stacks: number
);
parameters: {
func: (u: number, v: number, dest: Vector3) => void;
slices: number;
stacks: number;
};
}
import { Geometry } from './../core/Geometry';
import { BufferGeometry } from './../core/BufferGeometry';
export class PlaneBufferGeometry extends BufferGeometry {
constructor(
width?: number,
height?: number,
widthSegments?: number,
heightSegments?: number
);
parameters: {
width: number;
height: number;
widthSegments: number;
heightSegments: number;
};
}
export class PlaneGeometry extends Geometry {
constructor(
width?: number,
height?: number,
widthSegments?: number,
heightSegments?: number
);
parameters: {
width: number;
height: number;
widthSegments: number;
heightSegments: number;
};
}
import { Sphere } from './../math/Sphere';
import { Geometry } from './../core/Geometry';
import { BufferGeometry } from './../core/BufferGeometry';
export class PolyhedronBufferGeometry extends BufferGeometry {
constructor(
vertices: number[],
indices: number[],
radius?: number,
detail?: number
);
parameters: {
vertices: number[];
indices: number[];
radius: number;
detail: number;
};
}
export class PolyhedronGeometry extends Geometry {
constructor(
vertices: number[],
indices: number[],
radius?: number,
detail?: number
);
parameters: {
vertices: number[];
indices: number[];
radius: number;
detail: number;
};
boundingSphere: Sphere;
}
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册