[Paraview] Eye separation has been wrong since Immersive ParaView 5.2 - here's how to fix it

Stock, Mark Mark.Stock at nrel.gov
Fri Jun 23 17:22:47 EDT 2017


If you're an Immersive ParaView user, you may have noticed that 5.x
versions don't work as well in your CAVE. Specifically, I've noticed the
following differences when compared with ParaView 4.4.0:

1) I can place an object in space properly but it seems to move 10x as
fast when I move my head.
2) If I move the object just a little farther away from its initial
position, it clips out (vanishes).
3) When I am viewing a triangle mesh, some triangles seem to flip normals
(and get dark) when I move the object around.

The first two problems are caused by a change in the VTK source code from
March 2016 which arbitrarily multiples the eye separation distance by 10,
and also tightens the near and far clipping planes. The third can be
corrected by adding a single comment (which will help CAVE and Immersive
users, but probably nobody else). Both fixes will require you to build
ParaView from source - which you're probably doing anyway. I can't comment
on how these changes will affect HMD VR users.

The first and second problems are caused by a single commit to the VTK
repository that began to appear in ParaView with version 5.2.0. The
problem code is in VTK/Rendering/Core/vtkCamera.cxx starting at line 452
in versions 5.3 and 5.4. This problem can be fixed by replacing

  double eyeSeparationCorrectionFactor = 10.0;
  double shiftDistance = this->EyeSeparation / (2.0 *
  if(this->Distance < 1.0)
    shiftDistance *= this->Distance;

with simply

  double shiftDistance = this->EyeSeparation;

The second problem (clipping planes) is just a few lines down. I fixed it
by replacing

  // Front (aka near)
  double F = E[2] - (this->Distance + this->Thickness);//E[2] -
  // Back (aka far)
  double nearDistanceCorrectionFactor  = 1000.0;
  double B = E[2] - (this->Distance / nearDistanceCorrectionFactor);//E[2]
- .1;//this->ClippingRange[0];


  // Front (aka near)
  double F = E[2] - 10000.0;//this->ClippingRange[1];
  // Back (aka far)
  double B = E[2] - .1;//this->ClippingRange[0];

The third problem can be fixed by commenting out this line in
VTK/Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx (around line 1198 in
5.1, 1416 in 5.2 to 5.4):

"  if (cameraParallel == 0 && dot(normalVCVSOutput,vertexVC.xyz) > 0.0) {
normalVCVSOutput = -1.0*normalVCVSOutput; }"

I hope these fixes help some of you out there get your CAVE updated to the
latest ParaView.


Mark.Stock at nrel.gov

More information about the ParaView mailing list