瀏覽代碼

Added normals skinning to Phong and Lambert shaders.

Not sure it's entirely the correct way, though it does look better with it than without it.
alteredq 13 年之前
父節點
當前提交
d82d0df724
共有 3 個文件被更改,包括 16 次插入1 次删除
  1. 0 0
      build/Three.js
  2. 0 0
      build/custom/ThreeWebGL.js
  3. 16 1
      src/renderers/WebGLShaders.js

文件差異過大導致無法顯示
+ 0 - 0
build/Three.js


文件差異過大導致無法顯示
+ 0 - 0
build/custom/ThreeWebGL.js


+ 16 - 1
src/renderers/WebGLShaders.js

@@ -1058,6 +1058,20 @@ THREE.ShaderChunk = {
 
 
 	].join("\n"),
 	].join("\n"),
 
 
+	skinnormal_vertex: [
+
+		"#ifdef USE_SKINNING",
+
+			"mat4 skinMatrix = skinWeight.x * boneGlobalMatrices[ int( skinIndex.x ) ];",
+			"skinMatrix 	+= skinWeight.y * boneGlobalMatrices[ int( skinIndex.y ) ];",
+
+			"vec4 skinnedNormal = skinMatrix * vec4( transformedNormal, 0.0 );",
+			"transformedNormal = skinnedNormal.xyz;",
+
+		"#endif"
+
+	].join("\n"),
+
 	// SHADOW MAP
 	// SHADOW MAP
 
 
 	// based on SpiderGL shadow map and Fabien Sanglard's GLSL shadow mapping examples
 	// based on SpiderGL shadow map and Fabien Sanglard's GLSL shadow mapping examples
@@ -1657,6 +1671,7 @@ THREE.ShaderLib = {
 				THREE.ShaderChunk[ "color_vertex" ],
 				THREE.ShaderChunk[ "color_vertex" ],
 
 
 				THREE.ShaderChunk[ "morphnormal_vertex" ],
 				THREE.ShaderChunk[ "morphnormal_vertex" ],
+				THREE.ShaderChunk[ "skinnormal_vertex" ],
 
 
 				"#ifndef USE_ENVMAP",
 				"#ifndef USE_ENVMAP",
 
 
@@ -1670,7 +1685,6 @@ THREE.ShaderLib = {
 				THREE.ShaderChunk[ "default_vertex" ],
 				THREE.ShaderChunk[ "default_vertex" ],
 				THREE.ShaderChunk[ "shadowmap_vertex" ],
 				THREE.ShaderChunk[ "shadowmap_vertex" ],
 
 
-
 			"}"
 			"}"
 
 
 		].join("\n"),
 		].join("\n"),
@@ -1783,6 +1797,7 @@ THREE.ShaderLib = {
 				"vViewPosition = -mvPosition.xyz;",
 				"vViewPosition = -mvPosition.xyz;",
 
 
 				THREE.ShaderChunk[ "morphnormal_vertex" ],
 				THREE.ShaderChunk[ "morphnormal_vertex" ],
+				THREE.ShaderChunk[ "skinnormal_vertex" ],
 
 
 				"vNormal = transformedNormal;",
 				"vNormal = transformedNormal;",
 
 

部分文件因文件數量過多而無法顯示