|
@@ -117,13 +117,16 @@ THREE.AddOperation = 2;
|
|
|
|
|
|
// Mapping modes
|
|
|
|
|
|
-THREE.UVMapping = function () {};
|
|
|
+THREE.UVMapping = 300;
|
|
|
|
|
|
-THREE.CubeReflectionMapping = function () {};
|
|
|
-THREE.CubeRefractionMapping = function () {};
|
|
|
+THREE.CubeReflectionMapping = 301;
|
|
|
+THREE.CubeRefractionMapping = 302;
|
|
|
|
|
|
-THREE.SphericalReflectionMapping = function () {};
|
|
|
-THREE.SphericalRefractionMapping = function () {};
|
|
|
+THREE.SphericalReflectionMapping = 303;
|
|
|
+THREE.SphericalRefractionMapping = 304;
|
|
|
+
|
|
|
+THREE.EquirectangularReflectionMapping = 305;
|
|
|
+THREE.EquirectangularRefractionMapping = 306;
|
|
|
|
|
|
// Wrapping modes
|
|
|
|
|
@@ -14317,7 +14320,7 @@ THREE.Texture = function ( image, mapping, wrapS, wrapT, magFilter, minFilter, f
|
|
|
};
|
|
|
|
|
|
THREE.Texture.DEFAULT_IMAGE = undefined;
|
|
|
-THREE.Texture.DEFAULT_MAPPING = new THREE.UVMapping();
|
|
|
+THREE.Texture.DEFAULT_MAPPING = THREE.UVMapping;
|
|
|
|
|
|
THREE.Texture.prototype = {
|
|
|
|
|
@@ -14395,6 +14398,8 @@ THREE.TextureIdCount = 0;
|
|
|
|
|
|
THREE.CubeTexture = function ( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {
|
|
|
|
|
|
+ mapping = mapping !== undefined ? mapping : THREE.CubeReflectionMapping;
|
|
|
+
|
|
|
THREE.Texture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
|
|
|
|
|
|
this.images = images;
|
|
@@ -16153,7 +16158,7 @@ THREE.ShaderChunk[ 'morphnormal_vertex'] = "#ifdef USE_MORPHNORMALS\n\n vec3 mor
|
|
|
|
|
|
// File:src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl
|
|
|
|
|
|
-THREE.ShaderChunk[ 'envmap_pars_fragment'] = "#ifdef USE_ENVMAP\n\n uniform float reflectivity;\n uniform samplerCube envMap;\n uniform float flipEnvMap;\n uniform int combine;\n\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n uniform bool useRefract;\n uniform float refractionRatio;\n\n #else\n\n varying vec3 vReflect;\n\n #endif\n\n#endif";
|
|
|
+THREE.ShaderChunk[ 'envmap_pars_fragment'] = "#ifdef USE_ENVMAP\n\n uniform float reflectivity;\n #ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n uniform float flipEnvMap;\n uniform int combine;\n\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n uniform bool useRefract;\n uniform float refractionRatio;\n\n #else\n\n varying vec3 vReflect;\n\n #endif\n\n#endif";
|
|
|
|
|
|
// File:src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl
|
|
|
|
|
@@ -16225,7 +16230,7 @@ THREE.ShaderChunk[ 'map_pars_vertex'] = "#if defined( USE_MAP ) || defined( USE_
|
|
|
|
|
|
// File:src/renderers/shaders/ShaderChunk/envmap_fragment.glsl
|
|
|
|
|
|
-THREE.ShaderChunk[ 'envmap_fragment'] = "#ifdef USE_ENVMAP\n\n vec3 reflectVec;\n\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\n // http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations\n // Transforming Normal Vectors with the Inverse Transformation\n\n vec3 worldNormal = normalize( vec3( vec4( normal, 0.0 ) * viewMatrix ) );\n\n if ( useRefract ) {\n\n reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\n } else { \n\n reflectVec = reflect( cameraToVertex, worldNormal );\n\n }\n\n #else\n\n reflectVec = vReflect;\n\n #endif\n\n #ifdef DOUBLE_SIDED\n\n float flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n vec4 cubeColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\n #else\n\n vec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\n #endif\n\n #ifdef GAMMA_INPUT\n\n cubeColor.xyz *= cubeColor.xyz;\n\n #endif\n\n if ( combine == 1 ) {\n\n gl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularStrength * reflectivity );\n\n } else if ( combine == 2 ) {\n\n gl_FragColor.xyz += cubeColor.xyz * specularStrength * reflectivity;\n\n } else {\n\n gl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * cubeColor.xyz, specularStrength * reflectivity );\n\n }\n\n#endif";
|
|
|
+THREE.ShaderChunk[ 'envmap_fragment'] = "#ifdef USE_ENVMAP\n\n vec3 reflectVec;\n\n #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\n // http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations\n // Transforming Normal Vectors with the Inverse Transformation\n\n vec3 worldNormal = normalize( vec3( vec4( normal, 0.0 ) * viewMatrix ) );\n\n if ( useRefract ) {\n\n reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\n } else { \n\n reflectVec = reflect( cameraToVertex, worldNormal );\n\n }\n\n #else\n\n reflectVec = vReflect;\n\n #endif\n\n #ifdef DOUBLE_SIDED\n float flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n #else\n float flipNormal = 1.0;\n #endif\n\n #ifdef ENVMAP_TYPE_CUBE\n vec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\n #elif defined( ENVMAP_TYPE_EQUIREC )\n vec2 sampleUV;\n sampleUV.y = clamp( flipNormal * reflectVec.y * 0.5 + 0.5, 0.0, 1.0);\n sampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * 0.15915494309189533576888376337251 + 0.5; // reciprocal( 2 PI ) + 0.5\n vec4 envColor = texture2D( envMap, sampleUV );\n \n #elif defined( ENVMAP_TYPE_SPHERE )\n vec3 reflectView = flipNormal * normalize((viewMatrix * vec4( reflectVec, 0.0 )).xyz + vec3(0.0,0.0,1.0));\n vec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n #endif\n\n #ifdef GAMMA_INPUT\n\n envColor.xyz *= envColor.xyz;\n\n #endif\n\n if ( combine == 1 ) {\n\n gl_FragColor.xyz = mix( gl_FragColor.xyz, envColor.xyz, specularStrength * reflectivity );\n\n } else if ( combine == 2 ) {\n\n gl_FragColor.xyz += envColor.xyz * specularStrength * reflectivity;\n\n } else {\n\n gl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * envColor.xyz, specularStrength * reflectivity );\n\n }\n\n#endif";
|
|
|
|
|
|
// File:src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl
|
|
|
|
|
@@ -17748,6 +17753,60 @@ THREE.ShaderLib = {
|
|
|
|
|
|
},
|
|
|
|
|
|
+ /* -------------------------------------------------------------------------
|
|
|
+ // Cube map shader
|
|
|
+ ------------------------------------------------------------------------- */
|
|
|
+
|
|
|
+ 'equirect': {
|
|
|
+
|
|
|
+ uniforms: { "tEquirect": { type: "t", value: null },
|
|
|
+ "tFlip": { type: "f", value: - 1 } },
|
|
|
+
|
|
|
+ vertexShader: [
|
|
|
+
|
|
|
+ "varying vec3 vWorldPosition;",
|
|
|
+
|
|
|
+ THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
|
|
|
+
|
|
|
+ "void main() {",
|
|
|
+
|
|
|
+ " vec4 worldPosition = modelMatrix * vec4( position, 1.0 );",
|
|
|
+ " vWorldPosition = worldPosition.xyz;",
|
|
|
+
|
|
|
+ " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
|
|
|
+
|
|
|
+ THREE.ShaderChunk[ "logdepthbuf_vertex" ],
|
|
|
+
|
|
|
+ "}"
|
|
|
+
|
|
|
+ ].join("\n"),
|
|
|
+
|
|
|
+ fragmentShader: [
|
|
|
+
|
|
|
+ "uniform sampler2D tEquirect;",
|
|
|
+ "uniform float tFlip;",
|
|
|
+
|
|
|
+ "varying vec3 vWorldPosition;",
|
|
|
+
|
|
|
+ THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
|
|
|
+
|
|
|
+ "void main() {",
|
|
|
+
|
|
|
+ // " gl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );",
|
|
|
+ "vec3 direction = normalize( vWorldPosition );",
|
|
|
+ "vec2 sampleUV;",
|
|
|
+ "sampleUV.y = clamp( tFlip * direction.y * -0.5 + 0.5, 0.0, 1.0);",
|
|
|
+ "sampleUV.x = atan( direction.z, direction.x ) * 0.15915494309189533576888376337251 + 0.5;", // reciprocal( 2 PI ) + 0.5
|
|
|
+ "gl_FragColor = texture2D( tEquirect, sampleUV );",
|
|
|
+
|
|
|
+ THREE.ShaderChunk[ "logdepthbuf_fragment" ],
|
|
|
+
|
|
|
+ "}"
|
|
|
+
|
|
|
+ ].join("\n")
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
/* Depth encoding into RGBA texture
|
|
|
*
|
|
|
* based on SpiderGL shadow map example
|
|
@@ -22611,7 +22670,10 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
uniforms.refractionRatio.value = material.refractionRatio;
|
|
|
uniforms.combine.value = material.combine;
|
|
|
- uniforms.useRefract.value = material.envMap && material.envMap.mapping instanceof THREE.CubeRefractionMapping;
|
|
|
+ uniforms.useRefract.value = material.envMap && (
|
|
|
+ material.envMap.mapping === THREE.CubeRefractionMapping ||
|
|
|
+ material.envMap.mapping === THREE.SphericalRefractionMapping ||
|
|
|
+ material.envMap.mapping === THREE.EquirectangularRefractionMapping );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -24619,6 +24681,24 @@ THREE.WebGLProgram = ( function () {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ var envMapTypeDefine = null;
|
|
|
+ if ( parameters.envMap ) {
|
|
|
+ switch ( material.envMap.mapping ) {
|
|
|
+ case THREE.CubeReflectionMapping:
|
|
|
+ case THREE.CubeRefractionMapping:
|
|
|
+ envMapTypeDefine = "ENVMAP_TYPE_CUBE";
|
|
|
+ break;
|
|
|
+ case THREE.SphericalReflectionMapping:
|
|
|
+ case THREE.SphericalRefractionMapping:
|
|
|
+ envMapTypeDefine = "ENVMAP_TYPE_SPHERE";
|
|
|
+ break;
|
|
|
+ case THREE.EquirectangularReflectionMapping:
|
|
|
+ case THREE.EquirectangularRefractionMapping:
|
|
|
+ envMapTypeDefine = "ENVMAP_TYPE_EQUIREC";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// console.log( "building new program " );
|
|
|
|
|
|
//
|
|
@@ -24768,6 +24848,7 @@ THREE.WebGLProgram = ( function () {
|
|
|
|
|
|
parameters.map ? "#define USE_MAP" : "",
|
|
|
parameters.envMap ? "#define USE_ENVMAP" : "",
|
|
|
+ envMapTypeDefine ? "#define " + envMapTypeDefine : "",
|
|
|
parameters.lightMap ? "#define USE_LIGHTMAP" : "",
|
|
|
parameters.bumpMap ? "#define USE_BUMPMAP" : "",
|
|
|
parameters.normalMap ? "#define USE_NORMALMAP" : "",
|