bstouls 6 лет назад
Родитель
Сommit
ab9ec979b1
1 измененных файлов с 10 добавлено и 40 удалено
  1. 10 40
      h3d/shader/VolumeDecal.hx

+ 10 - 40
h3d/shader/VolumeDecal.hx

@@ -6,17 +6,12 @@ class VolumeDecal extends hxsl.Shader {
 
 
 		@:import BaseMesh;
 		@:import BaseMesh;
 
 
-		@const var isCentered : Bool;
 		@global var depthMap : Channel;
 		@global var depthMap : Channel;
 
 
 		@param var scale : Vec2;
 		@param var scale : Vec2;
 		@param var normal : Vec3;
 		@param var normal : Vec3;
 		@param var tangent : Vec3;
 		@param var tangent : Vec3;
-
-		@param var min : Vec3;
-		@param var max : Vec3;
-		@param var maxAngle : Float;
-
+		@const var isCentered : Bool = true;
 		var calculatedUV : Vec2;
 		var calculatedUV : Vec2;
 		var transformedTangent : Vec4;
 		var transformedTangent : Vec4;
 
 
@@ -25,48 +20,23 @@ class VolumeDecal extends hxsl.Shader {
 			transformedTangent = vec4((tangent * global.modelView.mat3()).normalize(),1.);
 			transformedTangent = vec4((tangent * global.modelView.mat3()).normalize(),1.);
 		}
 		}
 
 
-		function getWorlPos( pos : Vec2 ) : Vec3{
-			var depth = depthMap.get(screenToUv(pos)).r;
-			var ruv = vec4( pos, depth, 1 );
-			var wpos = ruv * camera.inverseViewProj;
-			var result = (wpos.xyz / wpos.w);
-			return result;
-		}
-
-		function outsideBounds() : Bool {
-			return (pixelTransformedPosition.x < min.x || pixelTransformedPosition.x > max.x ||
-					pixelTransformedPosition.y < min.y || pixelTransformedPosition.y > max.y ||
-			 		pixelTransformedPosition.z < min.z || pixelTransformedPosition.z > max.z );
-		}
-
 		function fragment() {
 		function fragment() {
-
 			var matrix = camera.inverseViewProj * global.modelViewInverse;
 			var matrix = camera.inverseViewProj * global.modelViewInverse;
 			var screenPos = projectedPosition.xy / projectedPosition.w;
 			var screenPos = projectedPosition.xy / projectedPosition.w;
-			var depth = depthMap.get(screenToUv(screenPos));
-			var ruv = vec4( screenPos, depth, 1 );
+			var ruv = vec4(
+				screenPos,
+				depthMap.get(screenToUv(screenPos)),
+				1
+			);
 			var wpos = ruv * matrix;
 			var wpos = ruv * matrix;
 			var ppos = ruv * camera.inverseViewProj;
 			var ppos = ruv * camera.inverseViewProj;
-
-			var worldPos = getWorlPos(screenPos);
-			var ddx = worldPos - getWorlPos(screenPos + vec2(global.pixelSize.x, 0));
-			var ddy = worldPos - getWorlPos(screenPos + vec2(0, global.pixelSize.y));
-			var worldNormal = normalize(cross(ddy, ddx));
-			//transformedNormal = worldNormal;
-
-			var angle = acos(dot(worldNormal, normal));
-			if( angle > maxAngle )
-				discard;
-
 			pixelTransformedPosition = ppos.xyz / ppos.w;
 			pixelTransformedPosition = ppos.xyz / ppos.w;
 			calculatedUV = scale * (wpos.xy / wpos.w);
 			calculatedUV = scale * (wpos.xy / wpos.w);
-
-			if( isCentered )
-				calculatedUV += 0.5;
-
-			if(	outsideBounds() )
+			if( isCentered ) calculatedUV += 0.5;
+			if( min(min(calculatedUV.x, calculatedUV.y), min(1 - calculatedUV.x, 1 - calculatedUV.y)) < 0 )
 				discard;
 				discard;
 		}
 		}
+
 	};
 	};
 
 
 	public function new( objectWidth : Float, objectHeight : Float ) {
 	public function new( objectWidth : Float, objectHeight : Float ) {
@@ -74,6 +44,6 @@ class VolumeDecal extends hxsl.Shader {
 		normal.set(0, 0, 1);
 		normal.set(0, 0, 1);
 		tangent.set(1, 0, 0);
 		tangent.set(1, 0, 0);
 		scale.set(1/objectWidth, 1/objectHeight);
 		scale.set(1/objectWidth, 1/objectHeight);
-		isCentered = true;
 	}
 	}
+
 }
 }