0026070: Ray tracing with reflections is poor on rotated presentation
authordbp <dbp@opencascade.com>
Thu, 16 Apr 2015 07:56:46 +0000 (10:56 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 16 Apr 2015 08:05:37 +0000 (11:05 +0300)
Test case for issue CR26070

src/Shaders/RaytraceBase.fs
tests/v3d/raytrace/bug26070 [new file with mode: 0755]

index 2cc2df9..9de6f3a 100644 (file)
@@ -927,7 +927,13 @@ vec4 Radiance (in SRay theRay, in vec3 theInverse)
       return vec4 (aResult.xyz + aWeight.xyz * aColor.xyz, aWeight.w * aColor.w);
     }
 
-    aHit.Normal = normalize (aHit.Normal);
+    vec3 aInvTransf0 = texelFetch (uSceneTransformTexture, anObjectId * 4 + 0).xyz;
+    vec3 aInvTransf1 = texelFetch (uSceneTransformTexture, anObjectId * 4 + 1).xyz;
+    vec3 aInvTransf2 = texelFetch (uSceneTransformTexture, anObjectId * 4 + 2).xyz;
+
+    aHit.Normal = normalize (vec3 (dot (aInvTransf0, aHit.Normal),
+                                   dot (aInvTransf1, aHit.Normal),
+                                   dot (aInvTransf2, aHit.Normal)));
 
     // For polygons that are parallel to the screen plane, the depth slope
     // is equal to 1, resulting in small polygon offset. For polygons that
@@ -946,10 +952,6 @@ vec4 Radiance (in SRay theRay, in vec3 theInverse)
 
     theRay.Origin += theRay.Direct * aHit.Time; // intersection point
 
-    vec3 aInvTransf0 = texelFetch (uSceneTransformTexture, anObjectId * 4 + 0).xyz;
-    vec3 aInvTransf1 = texelFetch (uSceneTransformTexture, anObjectId * 4 + 1).xyz;
-    vec3 aInvTransf2 = texelFetch (uSceneTransformTexture, anObjectId * 4 + 2).xyz;
-
     vec3 aNormal = SmoothNormal (aHit.UV, aTriIndex);
 
     aNormal = normalize (vec3 (dot (aInvTransf0, aNormal),
diff --git a/tests/v3d/raytrace/bug26070 b/tests/v3d/raytrace/bug26070
new file mode 100755 (executable)
index 0000000..fed4e92
--- /dev/null
@@ -0,0 +1,70 @@
+puts "============"
+puts "OCC26070"
+puts "============"
+puts ""
+#########################################################################
+# Ray tracing with reflections is poor on rotated presentation
+#########################################################################
+
+#source samples/tcl/cad.tc
+# make base 
+box b0 0  0 0 12 7 6
+explode b0 e
+blend b01 b0 1 b0_8
+blend b02 b01 1 b0_6
+
+# make cut at bottom
+box b1 3 -1 0 2 9 1.5
+bcut b2 b02 b1
+explode b2 e
+blend b3 b2 1 b2_27
+blend b4 b3 1 b2_30
+
+# make central cut
+box h1 3 -1 2.5 2 9 0.5
+box h2 3 -1 3 2 9 2
+plane p 4 -1 3 0 1 0
+pcylinder c p 1 9
+bcommon h3 h2 c
+bcut b5 b4 h1
+bcut b6 b5 h3
+
+# make side cut
+box b7 9 -1 1 2 9 4
+explode b7 e
+blend b71 b7 1 b7_6
+blend b72 b71 1 b7_8
+bcut b8 b6 b72
+
+# make box for inner cylindrical cut
+box bc1 -1 0 2 9 1 4
+box bc2 2 -1 2 4 3 3
+bcut bc3 bc1 bc2
+explode bc3 e
+blend bc4 bc3 1 bc3_20
+blend bc5 bc4 1 bc3_23
+blend bc6 bc5 1.99 bc3_21
+blend bc7 bc6 1.99 bc3_22
+
+# make inner cylindrical cut
+explode bc7 f
+revol r bc7_1 -1 0 6 1 0 0 100
+bcut b9 b8 r
+
+# make outer cylindrical cut
+plane p2 -1 0 6 1 0 0
+pcylinder c2 p2 6 15
+bcommon res b9 c2
+
+# show result
+#donly res
+trotate res 0 0 0 0 0 1 90
+#vinit
+vdisplay res
+vsetdispmode 1
+#vshowfaceboundary res 1 255 255 255
+vfit
+
+vrenderparams -rayTrace -reflections
+vlocrotate res 0 0 0 0 0 1 180
+vfit