0026676: Visualization, Ray Tracing - correct rendering if stereo pair
authorapl <apl@opencascade.com>
Thu, 17 Sep 2015 17:50:57 +0000 (20:50 +0300)
committerkgv <kgv@opencascade.com>
Tue, 22 Sep 2015 08:52:48 +0000 (11:52 +0300)
- Fixed interpolation of ray direction vector for asymmetric frustum (stereo left/right eye). Unnecessary normalization of direction vector affecting the frustum's geometry was removed.
- Fixed usage of projection type argument passed when rendering immediate graphics with stereo projection.

src/OpenGl/OpenGl_View_Raytrace.cxx
src/OpenGl/OpenGl_View_Redraw.cxx
tests/bugs/vis/bug26676 [new file with mode: 0644]

index 6c4b197..653e2c2 100644 (file)
@@ -1722,17 +1722,13 @@ void OpenGl_View::updateCamera (const OpenGl_Mat4& theOrientation,
 
       aDirect = aDirect - aOrigin;
 
-      GLdouble aInvLen = 1.0 / sqrt (aDirect.x() * aDirect.x() +
-                                     aDirect.y() * aDirect.y() +
-                                     aDirect.z() * aDirect.z());
-
       theOrigins[aOriginIndex++] = OpenGl_Vec3 (static_cast<GLfloat> (aOrigin.x()),
                                                 static_cast<GLfloat> (aOrigin.y()),
                                                 static_cast<GLfloat> (aOrigin.z()));
 
-      theDirects[aDirectIndex++] = OpenGl_Vec3 (static_cast<GLfloat> (aDirect.x() * aInvLen),
-                                                static_cast<GLfloat> (aDirect.y() * aInvLen),
-                                                static_cast<GLfloat> (aDirect.z() * aInvLen));
+      theDirects[aDirectIndex++] = OpenGl_Vec3 (static_cast<GLfloat> (aDirect.x()),
+                                                static_cast<GLfloat> (aDirect.y()),
+                                                static_cast<GLfloat> (aDirect.z()));
     }
   }
 }
index 31ea1d6..b1c3832 100644 (file)
@@ -385,7 +385,7 @@ void OpenGl_View::Redraw()
   #if !defined(GL_ES_VERSION_2_0)
     aCtx->SetReadDrawBuffer (aStereoMode == Graphic3d_StereoMode_QuadBuffer ? GL_BACK_LEFT : GL_BACK);
   #endif
-    if (!redrawImmediate (aProjectType, aMainFbos[0], anImmFbos[0]))
+    if (!redrawImmediate (Graphic3d_Camera::Projection_MonoLeftEye, aMainFbos[0], anImmFbos[0]))
     {
       toSwap = false;
     }
@@ -400,7 +400,7 @@ void OpenGl_View::Redraw()
     redraw (Graphic3d_Camera::Projection_MonoRightEye, aMainFbos[1]);
     myBackBufferRestored = Standard_True;
     myIsImmediateDrawn   = Standard_False;
-    if (!redrawImmediate (aProjectType, aMainFbos[1], anImmFbos[1]))
+    if (!redrawImmediate (Graphic3d_Camera::Projection_MonoRightEye, aMainFbos[1], anImmFbos[1]))
     {
       toSwap = false;
     }
diff --git a/tests/bugs/vis/bug26676 b/tests/bugs/vis/bug26676
new file mode 100644 (file)
index 0000000..50a8e01
--- /dev/null
@@ -0,0 +1,31 @@
+puts "============"
+puts "CR26676"
+puts "============"
+puts ""
+
+##########################################################################################
+# 0026676: Visualization, Ray Tracing - correct rendering if stereo pair
+##########################################################################################
+
+vinit View1 w=400 h=400
+vclear
+
+box b 1 2 50
+vraytrace 0
+vaxo
+vsetdispmode 1
+vdisplay b
+vcamera -persp
+vfit
+vrotate 0 -1.2 0
+vzoom 1.2
+
+vstereo -anaglyph redCyan
+vcamera -iod
+vcamera -iod 0.3
+
+vraytrace 1
+
+vselect 200 350
+
+vdump ${imagedir}/${casename}.png -stereo blend