Преглед на файлове

NormalDisplacementShader: fix calculation of reflection vector; fix example

Max Smolens преди 10 години
родител
ревизия
0bfa311159
променени са 2 файла, в които са добавени 7 реда и са изтрити 2 реда
  1. 4 2
      examples/js/shaders/NormalDisplacementShader.js
  2. 3 0
      examples/webgl_materials_normaldisplacementmap.html

+ 4 - 2
examples/js/shaders/NormalDisplacementShader.js

@@ -399,13 +399,15 @@ THREE.NormalDisplacementShader = {
 
 
 		"		vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );",
 		"		vec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );",
 
 
+		"		vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );",
+
 		"		#ifdef ENVMAP_MODE_REFLECTION",
 		"		#ifdef ENVMAP_MODE_REFLECTION",
 
 
-		"			vec3 vReflect = reflect( cameraToVertex, normal );",
+		"			vec3 vReflect = reflect( cameraToVertex, worldNormal );",
 
 
 		"		#else",
 		"		#else",
 
 
-		"			vec3 vReflect = refract( cameraToVertex, normal, refractionRatio );",
+		"			vec3 vReflect = refract( cameraToVertex, worldNormal, refractionRatio );",
 
 
 		"		#endif",
 		"		#endif",
 
 

+ 3 - 0
examples/webgl_materials_normaldisplacementmap.html

@@ -185,6 +185,9 @@
 				var parameters = { fragmentShader: shader.fragmentShader, vertexShader: shader.vertexShader, uniforms: uniforms, lights: true, fog: false };
 				var parameters = { fragmentShader: shader.fragmentShader, vertexShader: shader.vertexShader, uniforms: uniforms, lights: true, fog: false };
 				var material1 = new THREE.ShaderMaterial( parameters );
 				var material1 = new THREE.ShaderMaterial( parameters );
 
 
+				// Ensure that ENVMAP_MODE_REFLECTION is defined in shader
+				material1.envMap = reflectionCube;
+
 				var material2 = new THREE.MeshPhongMaterial( {
 				var material2 = new THREE.MeshPhongMaterial( {
 					color: diffuse,
 					color: diffuse,
 					specular: specular,
 					specular: specular,