浏览代码

Merge pull request #15313 from mrdoob/matcap

MeshMatcapMaterial no longer requiring a matcap.
Mr.doob 6 年之前
父节点
当前提交
6b07f27f24

+ 8 - 10
examples/webgl_materials_matcap.html

@@ -67,7 +67,7 @@
 			function init() {
 
 				// renderer
-				renderer = new THREE.WebGLRenderer();
+				renderer = new THREE.WebGLRenderer( { antialias: true } );
 				renderer.setPixelRatio( window.devicePixelRatio );
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				document.body.appendChild( renderer.domElement );
@@ -100,8 +100,6 @@
 
 					matcap.encoding = THREE.sRGBEncoding;
 
-					if ( mesh ) mesh.material.needsUpdate = true;
-
 				} );
 
 				// model
@@ -185,18 +183,18 @@
 
 			function imgCallback( event ) {
 
-				var matcap = mesh.material.matcap;
+				if ( mesh.material.matcap ) {
 
-				matcap.image = event.target;
+					mesh.material.matcap.dispose();
 
-				matcap.needsUpdate = true;
+				}
 
-				API.color = 0xffffff;
-				mesh.material.color.set( API.color );
+				mesh.material.matcap = new THREE.Texture( event.target );
+				mesh.material.matcap.needsUpdate = true;
 
-				render();
+				image.src = mesh.material.matcap.image.src; // corner div
 
-				image.src = matcap.image.src; // corner div
+				render();
 
 			}
 

+ 0 - 17
src/materials/MeshMatcapMaterial.js

@@ -68,23 +68,6 @@ function MeshMatcapMaterial( parameters ) {
 
 	this.setValues( parameters );
 
-	// a matcap is required
-
-	if ( this.matcap === null ) {
-
-		var canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );
-		canvas.width = 1;
-		canvas.height = 1;
-
-		var context = canvas.getContext( '2d' );
-
-		context.fillStyle = '#fff';
-		context.fillRect( 0, 0, 1, 1 );
-
-		this.matcap = new THREE.CanvasTexture( canvas );
-
-	}
-
 }
 
 MeshMatcapMaterial.prototype = Object.create( Material.prototype );

+ 9 - 2
src/renderers/shaders/ShaderLib/meshmatcap_frag.glsl.js

@@ -42,9 +42,16 @@ void main() {
 	vec3 y = cross( viewDir, x );
 	vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; // 0.495 to remove artifacts caused by undersized matcap disks
 
-	vec4 matcapColor = texture2D( matcap, uv );
+	#ifdef USE_MATCAP
 
-	matcapColor = matcapTexelToLinear( matcapColor );
+		vec4 matcapColor = texture2D( matcap, uv );
+		matcapColor = matcapTexelToLinear( matcapColor );
+
+	#else
+
+		vec4 matcapColor = vec4( 1.0 );
+
+	#endif
 
 	vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;
 

+ 1 - 0
src/renderers/webgl/WebGLProgram.js

@@ -451,6 +451,7 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
 			( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',
 
 			parameters.map ? '#define USE_MAP' : '',
+			parameters.matcap ? '#define USE_MATCAP' : '',
 			parameters.envMap ? '#define USE_ENVMAP' : '',
 			parameters.envMap ? '#define ' + envMapTypeDefine : '',
 			parameters.envMap ? '#define ' + envMapModeDefine : '',

+ 1 - 1
src/renderers/webgl/WebGLPrograms.js

@@ -28,7 +28,7 @@ function WebGLPrograms( renderer, extensions, capabilities ) {
 	};
 
 	var parameterNames = [
-		"precision", "supportsVertexTextures", "map", "mapEncoding", "matcapEncoding", "envMap", "envMapMode", "envMapEncoding",
+		"precision", "supportsVertexTextures", "map", "mapEncoding", "matcap", "matcapEncoding", "envMap", "envMapMode", "envMapEncoding",
 		"lightMap", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "objectSpaceNormalMap", "displacementMap", "specularMap",
 		"roughnessMap", "metalnessMap", "gradientMap",
 		"alphaMap", "combine", "vertexColors", "fog", "useFog", "fogExp",