浏览代码

Fixed reflection and added handling of refraction to normal map shader.

alteredq 13 年之前
父节点
当前提交
8d330fdeb2
共有 3 个文件被更改,包括 16 次插入5 次删除
  1. 0 2
      build/Three.js
  2. 0 2
      build/custom/ThreeExtras.js
  3. 16 1
      src/extras/ShaderUtils.js

文件差异内容过多而无法显示
+ 0 - 2
build/Three.js


文件差异内容过多而无法显示
+ 0 - 2
build/custom/ThreeExtras.js


+ 16 - 1
src/extras/ShaderUtils.js

@@ -132,6 +132,8 @@ THREE.ShaderUtils = {
 				"uShininess": { type: "f", value: 30 },
 				"uShininess": { type: "f", value: 30 },
 				"uOpacity": { type: "f", value: 1 },
 				"uOpacity": { type: "f", value: 1 },
 
 
+				"useRefract": { type: "i", value: 0 },
+				"uRefractionRatio": { type: "f", value: 0.98 },
 				"uReflectivity": { type: "f", value: 0.5 },
 				"uReflectivity": { type: "f", value: 0.5 },
 
 
 				"uOffset" : { type: "v2", value: new THREE.Vector2( 0, 0 ) },
 				"uOffset" : { type: "v2", value: new THREE.Vector2( 0, 0 ) },
@@ -164,6 +166,9 @@ THREE.ShaderUtils = {
 				"uniform samplerCube tCube;",
 				"uniform samplerCube tCube;",
 
 
 				"uniform float uNormalScale;",
 				"uniform float uNormalScale;",
+
+				"uniform bool useRefract;",
+				"uniform float uRefractionRatio;",
 				"uniform float uReflectivity;",
 				"uniform float uReflectivity;",
 
 
 				"varying vec3 vTangent;",
 				"varying vec3 vTangent;",
@@ -485,7 +490,17 @@ THREE.ShaderUtils = {
 
 
 					"if ( enableReflection ) {",
 					"if ( enableReflection ) {",
 
 
-						"vec3 vReflect = reflect( normalize( vWorldPosition ), normal );",
+						"vec3 vReflect;",
+
+						"if ( useRefract ) {",
+
+							"vReflect = refract( normalize( vWorldPosition - cameraPosition ), normal, uRefractionRatio );",
+
+						"} else {",
+
+							"vReflect = reflect( normalize( vWorldPosition - cameraPosition ), normal );",
+
+						"}",
 
 
 						"vec4 cubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );",
 						"vec4 cubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );",
 
 

部分文件因为文件数量过多而无法显示