[vtk-developers] Bug in vtkCamera::Elevation

David Gobbi david.gobbi at gmail.com
Thu Feb 4 17:39:04 EST 2016


Hi Xabi,

I think it's a good fix, note that the Pitch() method probably has the same
issue.

It will break backwards compatibility, however, because currently the
Elevation()
method leaves the ViewUp unchanged.  So any code that calls Elevation() and
then calls Azimuth() will give a different result after your fix.

Does anyone know why the Elevation() and Pitch() methods leave the ViewUp
unchanged?

 - David


On Thu, Feb 4, 2016 at 6:54 AM, Xabi Riobe <xabivtk at gmail.com> wrote:

> Hi,
>
> There is an issue in vtkCamera::Elevation if the angle is 90.
>
> It is 100% reproductible with VS2013 if compiled in 64bits, otherwise the
> rounding epsilon makes it work by chance.
>
> I'm willing to fix it in GitLab but first i would like your opinion about
> the best way to do it.
>
> with a simple example of a plane in a renderer, and a call to
> renderer->GetActiveCamera()->Elevation(90)
>
> What happens in the call stack of vtkCamera::Elevation :
>    vtkCamera::SetPosition()
>    vtkCamera::ComputeViewTransform
>    vtkPerspectiveTransform::SetupCamera
>
>    vtkMath::Cross(viewUp,viewPlaneNormal,viewSideways);
>
> where viewUp and viewPlaneNormal are both (0,1,0)  so viewSideways is
> (0,0,0) leading to bad camera parameters.
> Here comes the VS13+64bits configuration case, when with others,
> viewSideways is luckily different than 0
>
> What do you think of applying the rotation to the viewUp vector in
> vtkCamera::Elevation before the call to SetPosition?
> Should we put a warning in vtkPerspectiveTransform::SetupCamera
> when vtkMath::Normalize returns 0?
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtk-developers/attachments/20160204/c89a91ef/attachment.html>


More information about the vtk-developers mailing list