[vtkusers] Actors in front of camera clipped despite ResetCameraClippingRange()

Elvis Stansvik elvis.stansvik at orexplore.com
Tue Jun 21 12:25:14 EDT 2016


2016-06-21 17:44 GMT+02:00 Elvis Stansvik <elvis.stansvik at orexplore.com>:

> Den 21 juni 2016 4:45 em skrev "Ken Martin" <ken.martin at kitware.com>:
> >
> > That image doesn't match what I think you are saying, so maybe you can
> help me understand.  You mention the camera is positioned on a cylinder of
> radius 3.0 and from your code it looks like the focal point is not changing.
> >
> > If that is true then at some point some of the cones will be behind your
> camera. For example if your focal point was (0,0,0) and your camera was at
> (3,10,0) then you would be looking mostly down the y axis and from your
> code you have a cone positioned at (0,20,0) which would be behind you.
> >
> > Having said all that your image looks funny anyhow.  With a parallel
> projection all the cones should look the exact same aside from clipping but
> the first cone really looks off from the rest and the others are all
> identical so something is off.
> >
> > I did look through that code and it looks reasonable to me (the patch
> referenced is not correct BTW, parallel projection still requires proper z
> buffer scaling and clipping)  If you could provide a few more images from
> different viewpoints, ideally with the resulting camera
> >
> > clipping range
> > parallel scale
> > position
> > focal point
> >
> > for those images that would help me see what is going on.
>
> Thanks a lot for taking the time Ken. You're right of course about cones
> being behind me. I think what I meant was I'm never inside a cone.
>
> I'll try to make a minimal test case when I get home, as I'm on the bus
> and only have my phone right now.
>
Here's a minimal test case where the camera is positioned to look "down" on
the stack of cones, the stack is cut off due to clipping (see attached
.png):

from vtk import vtkRenderer, vtkRenderWindow, vtkRenderWindowInteractor
from vtk import vtkConeSource, vtkActor, vtkPolyDataMapper

renderer = vtkRenderer()
renderWindow = vtkRenderWindow()
renderWindow.SetSize(500, 1000)
renderWindow.AddRenderer(renderer)

interactor = vtkRenderWindowInteractor()
interactor.SetRenderWindow(renderWindow)

# Create a stack of 40 cones along the Y axis
for i in range(-20, 20):
    coneSource = vtkConeSource()
    coneSource.SetDirection(0, 1, 0)
    coneSource.SetResolution(8)
    coneSource.SetCenter(0, i, 0)

    coneMapper = vtkPolyDataMapper()
    coneMapper.SetInputConnection(coneSource.GetOutputPort())

    coneActor = vtkActor()
    coneActor.SetMapper(coneMapper)

    renderer.AddActor(coneActor)

# Position camera at (3.0, 10.0, 0), looking "down" along the stack
camera = renderer.GetActiveCamera()
camera.SetParallelProjection(True)
camera.SetPosition(3.0, 10.0, 0.0)
camera.SetFocalPoint(0.0, 0.0, 0.0)
camera.SetParallelScale(5.0)

# Reset camera clipping range
renderer.ResetCameraClippingRange()

# Print some camera info
print(camera)

interactor.Start()

But I'm beginning to think this is maybe just a misunderstanding on my
part. Perhaps this clipping is inevitable and expected when using parallel
projection?

Thanks in advance,
Elvis

Elvis
>
> >
> > Thanks
> > Ken
> >
> >
> >
> >
> >
> > On Tue, Jun 21, 2016 at 7:06 AM, Elvis Stansvik <
> elvis.stansvik at orexplore.com> wrote:
> >>
> >> Hi all,
> >>
> >> I have a setup where the camera always moves on a cylinder of radius
> 3.0 around my subject (just testing with a stack of cones at the moment).
> The focal point is always positioned along the Y axis, and the camera may
> be moved up and down independent of the focus point, but the camera is
> always at a distance of 3 from the Y axis.
> >>
> >> As soon as the user moves the camera, I reset the camera clipping range
> with ResetCameraClippingRange(). Despite this, when the camera and the
> focal point are far away from eachother, the actors (my stack of cones) get
> clipped by the near plane for some reason.
> >>
> >> See the attached screenshot which shows the clipping.
> >>
> >> What I'm doing to my camera (in response to Shift+mouse drag in my
> custom interactor) to end up in this situation is just:
> >>
> >>         camera = renderer.GetActiveCamera()
> >>         (x, y, z) = camera.GetPosition()
> >>         camera.SetPosition(x, y - self.PanningFactor * dy, z)
> >>         renderer.ResetCameraClippingRange()
> >>
> >> and I've verified that the camera is always at a distance of 3.0 from
> the Y axis.
> >>
> >> The cones I'm using in this test were created with:
> >>
> >>     for i in range(-10, 20):
> >>         coneSource = vtkConeSource()
> >>         coneSource.SetDirection(0, 1, 0)
> >>         coneSource.SetResolution(8)
> >>         coneSource.SetCenter(0, i, 0)
> >>
> >>         coneMapper = vtkPolyDataMapper()
> >>         coneMapper.SetInputConnection(coneSource.GetOutputPort())
> >>
> >>         coneActor = vtkActor()
> >>         coneActor.SetMapper(coneMapper)
> >>
> >>         widget.renderer.AddActor(coneActor)
> >>
> >> I don't understand why I see clipping occur here, since I'm using
> ResetCameraClippingRange, and nothing is behind the camera. The radius of
> these cones is the default (0.5).
> >>
> >> It's probably something stupid, but any advice is much appreciated.
> >>
> >> Elvis
> >>
> >> _______________________________________________
> >> Powered by www.kitware.com
> >>
> >> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
> >>
> >> Please keep messages on-topic and check the VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
> >>
> >> Search the list archives at: http://markmail.org/search/?q=vtkusers
> >>
> >> Follow this link to subscribe/unsubscribe:
> >> http://public.kitware.com/mailman/listinfo/vtkusers
> >>
> >
> >
> >
> > --
> > Ken Martin PhD
> > Chairman & CFO
> > Kitware Inc.
> > 28 Corporate Drive
> > Clifton Park NY 12065
> > 518 371 3971
> >
> > This communication, including all attachments, contains confidential and
> legally privileged information, and it is intended only for the use of the
> addressee.  Access to this email by anyone else is unauthorized. If you are
> not the intended recipient, any disclosure, copying, distribution or any
> action taken in reliance on it is prohibited and may be unlawful. If you
> received this communication in error please notify us immediately and
> destroy the original message.  Thank you.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160621/aec29e67/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: testcase.py
Type: text/x-python
Size: 1115 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160621/aec29e67/attachment.py>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: testcase.png
Type: image/png
Size: 29533 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160621/aec29e67/attachment.png>


More information about the vtkusers mailing list