Przeglądaj źródła

revert changes in GeometryCompressionUtils

LeonYuanYao 5 lat temu
rodzic
commit
85d0e21bec
1 zmienionych plików z 81 dodań i 10 usunięć
  1. 81 10
      examples/jsm/utils/GeometryCompressionUtils.js

+ 81 - 10
examples/jsm/utils/GeometryCompressionUtils.js

@@ -696,7 +696,6 @@ function PackedPhongMaterial(parameters) {
 
 
 	]);
 	]);
 
 
-	// use some of the shader src from ShaderChunk. 
 	this.vertexShader = [
 	this.vertexShader = [
 		"#define PHONG",
 		"#define PHONG",
 
 
@@ -719,22 +718,91 @@ function PackedPhongMaterial(parameters) {
 		ShaderChunk.logdepthbuf_pars_vertex,
 		ShaderChunk.logdepthbuf_pars_vertex,
 		ShaderChunk.clipping_planes_pars_vertex,
 		ShaderChunk.clipping_planes_pars_vertex,
 
 
-		// Shader src: `geometry_decode_pars_vertex`
-		ShaderChunk.geometry_decode_pars_vertex, 
+		`#ifdef USE_PACKED_NORMAL
+			#if USE_PACKED_NORMAL == 0
+				vec3 decodeNormal(vec3 packedNormal)
+				{
+					float x = packedNormal.x * 2.0 - 1.0;
+					float y = packedNormal.y * 2.0 - 1.0;
+					vec2 scth = vec2(sin(x * PI), cos(x * PI));
+					vec2 scphi = vec2(sqrt(1.0 - y * y), y);
+					return normalize( vec3(scth.y * scphi.x, scth.x * scphi.x, scphi.y) );
+				}
+			#endif
+
+			#if USE_PACKED_NORMAL == 1
+				vec3 decodeNormal(vec3 packedNormal)
+				{
+					vec3 v = vec3(packedNormal.xy, 1.0 - abs(packedNormal.x) - abs(packedNormal.y));
+					if (v.z < 0.0)
+					{
+						v.xy = (1.0 - abs(v.yx)) * vec2((v.x >= 0.0) ? +1.0 : -1.0, (v.y >= 0.0) ? +1.0 : -1.0);
+					}
+					return normalize(v);
+				}
+			#endif
+
+			#if USE_PACKED_NORMAL == 2
+				vec3 decodeNormal(vec3 packedNormal)
+				{
+					vec3 v = (packedNormal * 2.0) - 1.0;
+					return normalize(v);
+				}
+			#endif
+		#endif`,
+
+		`#ifdef USE_PACKED_POSITION
+			#if USE_PACKED_POSITION == 0
+				uniform mat4 quantizeMatPos;
+			#endif
+		#endif`,
+
+		`#ifdef USE_PACKED_UV
+			#if USE_PACKED_UV == 1
+				uniform mat3 quantizeMatUV;
+			#endif
+		#endif`,
+
+		`#ifdef USE_PACKED_UV
+			#if USE_PACKED_UV == 0
+				vec2 decodeUV(vec2 packedUV)
+				{
+					vec2 uv = (packedUV * 2.0) - 1.0;
+					return uv;
+				}
+			#endif
+
+			#if USE_PACKED_UV == 1
+				vec2 decodeUV(vec2 packedUV)
+				{
+					vec2 uv = ( vec3(packedUV, 1.0) * quantizeMatUV ).xy;
+					return uv;
+				}
+			#endif
+		#endif`,
 
 
 		"void main() {",
 		"void main() {",
 
 
 		ShaderChunk.uv_vertex,
 		ShaderChunk.uv_vertex,
+
+		`#ifdef USE_UV
+			#ifdef USE_PACKED_UV
+				vUv = decodeUV(vUv);
+			#endif
+		#endif`,
+
 		ShaderChunk.uv2_vertex,
 		ShaderChunk.uv2_vertex,
 		ShaderChunk.color_vertex,
 		ShaderChunk.color_vertex,
 		ShaderChunk.beginnormal_vertex,
 		ShaderChunk.beginnormal_vertex,
 
 
-		// Shader src: `geometry_decode_normal_vertex`
-		ShaderChunk.geometry_decode_normal_vertex, 
+		`#ifdef USE_PACKED_NORMAL
+			objectNormal = decodeNormal(objectNormal);
+		#endif
 
 
-		`#ifdef USE_TANGENT
+		#ifdef USE_TANGENT
 			vec3 objectTangent = vec3( tangent.xyz );
 			vec3 objectTangent = vec3( tangent.xyz );
-		#endif`,
+		#endif
+		`,
 
 
 		ShaderChunk.morphnormal_vertex,
 		ShaderChunk.morphnormal_vertex,
 		ShaderChunk.skinbase_vertex,
 		ShaderChunk.skinbase_vertex,
@@ -747,8 +815,11 @@ function PackedPhongMaterial(parameters) {
 
 
 		ShaderChunk.begin_vertex,
 		ShaderChunk.begin_vertex,
 
 
-		// Shader src: `geometry_decode_vertex`
-		ShaderChunk.geometry_decode_vertex, 
+		`#ifdef USE_PACKED_POSITION
+			#if USE_PACKED_POSITION == 0
+				transformed = ( vec4(transformed, 1.0) * quantizeMatPos ).xyz;
+			#endif
+		#endif`,
 
 
 		ShaderChunk.morphtarget_vertex,
 		ShaderChunk.morphtarget_vertex,
 		ShaderChunk.skinning_vertex,
 		ShaderChunk.skinning_vertex,
@@ -765,7 +836,7 @@ function PackedPhongMaterial(parameters) {
 		ShaderChunk.fog_vertex,
 		ShaderChunk.fog_vertex,
 
 
 		"}",
 		"}",
-	].join("\n");
+	].join( "\n" );
 
 
 	// Use the original MeshPhongMaterial's fragmentShader. 
 	// Use the original MeshPhongMaterial's fragmentShader. 
 	this.fragmentShader = [
 	this.fragmentShader = [