提交 15e08c13 编写于 作者: B Ben Houston

add support for Texture.encoding to Material.map

上级 94eca51d
......@@ -315,3 +315,4 @@ THREE.RGBEEncoding = 3002; // AKA Radiance
THREE.RGBM7Encoding = 3004;
THREE.RGBM16Encoding = 3005;
//THREE.RGBDEncoding = 3006; TODO
THREE.DefaultEncoding = 3007; // Use sRGB or Linear as appropriate.
......@@ -1888,6 +1888,7 @@ THREE.WebGLRenderer = function ( parameters ) {
}
uniforms.map.value = material.map;
uniforms.mapEncoding.value = (( material.map && material.map.encoding !== THREE.DefaultEncoding ) ? material.map.encoding : THREE.sRGBEncoding );
uniforms.specularMap.value = material.specularMap;
uniforms.alphaMap.value = material.alphaMap;
......@@ -1962,7 +1963,7 @@ THREE.WebGLRenderer = function ( parameters ) {
}
uniforms.envMap.value = material.envMap;
uniforms.envMapEncoding.value = ( material.envMap ? material.envMap.encoding : THREE.LinearEncoding );
uniforms.envMapEncoding.value = (( material.envMap && material.envMap.encoding !== THREE.DefaultEncoding )? material.envMap.encoding : THREE.LinearEncoding );
uniforms.flipEnvMap.value = ( material.envMap instanceof THREE.WebGLRenderTargetCube ) ? 1 : - 1;
uniforms.reflectivity.value = material.reflectivity;
......@@ -2034,7 +2035,7 @@ THREE.WebGLRenderer = function ( parameters ) {
if ( material.emissiveMap ) {
uniforms.emissiveMap.value = material.emissiveMap;
uniforms.emissiveMapEncoding.value = material.emissiveMap.encoding;
uniforms.emissiveMapEncoding.value = ( material.emissiveMap.encoding !== THREE.DefaultEncoding ) ? material.emissiveMap.encoding : THREE.LinearEncoding;
}
......@@ -2055,7 +2056,7 @@ THREE.WebGLRenderer = function ( parameters ) {
if ( material.emissiveMap ) {
uniforms.emissiveMap.value = material.emissiveMap;
uniforms.emissiveMapEncoding.value = material.emissiveMap.encoding;
uniforms.emissiveMapEncoding.value = ( material.emissiveMap.encoding !== THREE.DefaultEncoding ) ? material.emissiveMap.encoding : THREE.LinearEncoding;
}
......@@ -2110,7 +2111,7 @@ THREE.WebGLRenderer = function ( parameters ) {
if ( material.emissiveMap ) {
uniforms.emissiveMap.value = material.emissiveMap;
uniforms.emissiveMapEncoding.value = material.emissiveMap.encoding;
uniforms.emissiveMapEncoding.value = ( material.emissiveMap.encoding !== THREE.DefaultEncoding ) ? material.emissiveMap.encoding : THREE.LinearEncoding;
}
......
......@@ -18,7 +18,7 @@ vec4 texelDecode( in vec4 encodedTexel, in int encoding ) {
}
if( encoding == ENCODING_sRGB ) {
return vec4( pow( encodedTexel.xyz, vec3( GAMMA_FACTOR ) ), encodedTexel.w );
return vec4( pow( encodedTexel.xyz, vec3( float( GAMMA_FACTOR ) ) ), encodedTexel.w );
}
if( encoding == ENCODING_RGBE ) {
......@@ -56,7 +56,7 @@ vec4 texelEncode( in vec4 linearRgba, in int encoding )
}
if( encoding == ENCODING_sRGB ) {
return vec4( pow( linearRgba.xyz, vec3( 1.0 / GAMMA_FACTOR ) ), linearRgba.w );
return vec4( pow( linearRgba.xyz, vec3( 1.0 / float( GAMMA_FACTOR ) ) ), linearRgba.w );
}
if( encoding == ENCODING_RGBE ) {
......
......@@ -2,8 +2,7 @@
vec4 texelColor = texture2D( map, vUv );
texelColor.xyz = inputToLinear( texelColor.xyz );
texelColor = texelDecode( texelColor, mapEncoding );
diffuseColor *= texelColor;
#endif
#ifdef USE_MAP
uniform sampler2D map;
uniform int mapEncoding;
#endif
\ No newline at end of file
#endif
......@@ -10,6 +10,7 @@ THREE.UniformsLib = {
"opacity": { type: "f", value: 1.0 },
"map": { type: "t", value: null },
"mapEncoding" : { type: "i", value: THREE.sRGBEncoding },
"offsetRepeat": { type: "v4", value: new THREE.Vector4( 0, 0, 1, 1 ) },
"specularMap": { type: "t", value: null },
......
......@@ -36,7 +36,7 @@ THREE.Texture = function ( image, mapping, wrapS, wrapT, magFilter, minFilter, f
this.premultiplyAlpha = false;
this.flipY = true;
this.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)
this.encoding = THREE.LinearEncoding; // Values !== THREE.LinearEncoding only supported on envMap and emissiveMap (as these maps regularly have unbounded intensity values, i.e. via an *.hdr or *.exr image.)
this.encoding = THREE.DefaultEncoding; // Values !== THREE.LinearEncoding only supported on map, envMap and emissiveMap (as these maps regularly have unbounded intensity values, i.e. via an *.hdr or *.exr image.)
this.version = 0;
this.onUpdate = null;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册