mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-09 13:22:24 +03:00
0026676: Visualization, Ray Tracing - correct rendering if stereo pair
- 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.
This commit is contained in:
@@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user