[vtkusers] Problem with vtkTkRenderWidget and CrystalEyes stereo

Michael Scarpa m.scarpa at uva.nl
Tue Jul 11 07:09:33 EDT 2006


On Tue, Jul 11, 2006 at 10:14:27AM +0100, Jens Thomas wrote:
> Many thanks for getting back to me.

No problem.

> Michael Scarpa wrote:
> >On Mon, Jul 10, 2006 at 05:33:25PM +0100, Jens Thomas wrote:
> >  
> >>Michael Scarpa wrote:
> >>    
> >>>Jens Thomas wrote:
> >>>      
> >>>>I'm trying to get vtk to use CrystalEyes stereo with a
> >>>>vtkTkRenderWidget, but am hitting a problem in that the render window I
> >>>>create is not stereo capapble, and I therefore get the error message:
> >>>>
> >>>>vtkXOpenGLRenderWindow (0x8351740): Adjusting stereo mode on a window
> >>>>that does not support stereo type CrystalEyes is not possible.
> >>>>
> >>>>I call vtkTkRenderWidget with the "stereo=1" flag to generate a widget
> >>>>with a renderwindow that is stereo capable, and then call the
> >>>>GetRenderWindow method on the widget to get the RenderWindow. However,
> >>>>the RenderWindow I get back is not stereo capable, as illustrated by the
> >>>>error message above. This is despite the fact that the window that is
> >>>>initially created within vtkTkRenderWidget is stereo capable.
> >>>>
> >>>>I checked this with a print statement in the file:
> >>>>
> >>>>VTK/Wrapping/Python/vtk/tk/vtkTkRenderWidget.py
> >>>>
> >>>>at line 89, where it checks the keyword dictionary as shown below:
> >>>>
> >>>>try:  # was a stereo rendering context requested?
> >>>>           if kw['stereo']:
> >>>>              print "Setting stereo"
> >>>>              renderWindow.StereoCapableWindowOn()
> >>>>              print renderWindow
> >>>>              del kw['stereo']
> >>>>       except KeyError:
> >>>>           pass
> >>>>
> >>>>At the point of the print statement, the window is stereo capapble.
> >>>>
> >>>>It therefore seems that the window returned by the GetRenderWindow is
> >>>>not the same one as was first created.
> >>>>
> >>>>If I create the render window directly, and avoid the vtkTkRenderWidget
> >>>>side of things, it appears to work o.k.
> >>>>
> >>>>I've pasted in an example below that demonstrates the problem - setting
> >>>>the tk variable to 0 or 1 turns off the Tk code and shows that it
> >>>>appears to work if you don't use the  vtkTkRenderWidget code.
> >>>>
> >>>>Any suggestions/help would be greatly appreciated.
> >>>>
> >>>>        
> >>>>from Tkinter import *
> >>>>from vtk import *
> >>>>from vtk.tk.vtkTkRenderWidget import *
> >>>      
> >>>># Set the tk variable to 0 to eschew the Tk code
> >>>>tk=1
> >>>>if tk:
> >>>>   # Make a root window
> >>>>   root = Tk()
> >>>>   # Add a vtkTkRenderWidget
> >>>>   renderWidget = vtkTkRenderWidget(root,stereo=1)
> >>>>   renderWidget.pack()
> >>>>   # Get the render window from the widget
> >>>>   renWin = renderWidget.GetRenderWindow()
> >>>>   print "renWin is"
> >>>>   print renWin
> >>>>else:
> >>>>   renWin = vtk.vtkRenderWindow()
> >>>>   renWin.StereoCapableWindowOn()
> >>>>   print "renWin is"
> >>>>   print renWin
> >>>>   iren = vtk.vtkRenderWindowInteractor()
> >>>>   iren.SetRenderWindow(renWin)
> >>>>
> >>>>renWin.SetStereoTypeToCrystalEyes()
> >>>>#renWin.SetStereoTypeToRedBlue()
> >>>>renWin.StereoRenderOn()
> >>>>
> >>>># Next, do the VTK stuff
> >>>>ren = vtkRenderer()
> >>>>renWin.AddRenderer(ren)
> >>>>cone = vtkConeSource()
> >>>>cone.SetResolution(16)
> >>>>coneMapper = vtkPolyDataMapper()
> >>>>coneMapper.SetInput(cone.GetOutput())
> >>>>coneActor = vtkActor()
> >>>>coneActor.SetMapper(coneMapper)
> >>>>ren.AddActor(coneActor)
> >>>>
> >>>>
> >>>># start up the event loop
> >>>>if tk:
> >>>>   root.mainloop()
> >>>>else:
> >>>>   iren.Initialize()
> >>>>   renWin.Render()
> >>>>   iren.Start()
> >>>>   
> >>>>        
> >>>Have you tried the same things with vtkTkRenderWindowInteractor instead
> >>>of vtkTkRenderWidget? With the former, you can create your own
> >>>vtkRenderWindow instance and provide it to the widget for use.  It
> >>>would be interesting to see if you encounter the same problem in this
> >>>case, since you can create your own render window and set its
> >>>capabilities yourself before handing it over to Tk.
> >>>
> >>>      
> >>I've been playing around with this a bit more and have got a little 
> >>further, although I'm still stuck.
> >>
> >>You can actually create your own window with the vtkTkRenderWidget and 
> >>pass it in too, so I tried this and still had the same problem. I've 
> >>therefore tried to remove Python from the equation by writing a Tcl 
> >>script that does exactly the same thing (well, I think it does - I've 
> >>never used Tcl before) . It seems that the vtkTkRenderWidget doesn't 
> >>accept a -stereo argument, so I have to create the render window myself 
> >>and then pass it in.
> >>
> >>However, even doing this, the code demonstrates exactly the same 
> >>problems as calling the routine from Python, so it seems that the 
> >>problem resides in the Tcl/Tk side of things. I've pasted the code into 
> >>the tail of this email in case anyone wants to try it.
> >>
> >>I've tried this with the VTK 5.0 on Windows, Mac OSX and Linux, and 
> >>things seem to work fine on Windows and Mac OSX, but not under Linux - 
> >>and unfortunately, it's Linux that I need this to work on.
> >>    
> >
> >Just a crazy thought, but ... are you sure the graphics card of the
> >Linux machine you are using is able to produce active stereo images?
> >Because if not, vtk won't produce any error messages (at least in my
> >experience) and simply not render in active stereo.
> >  
> The problem is that the render window is not stereo capable and that I'm 
> getting an error messages when I try to set the stereo type to crystal 
> eyes. The kit I've got is capable of working with active stereo, but 
> until I can get a stereo capable window, there's not much I can do with it!
> >  
> >>I've tried this on Linux running Suse 9.3 on a Pentium with tcl 8.4.9-7 
> >>and tk 8.4.9-9, as well as a RHEL 3 on a Intel Xeon with tcl 8.3.5-92.4 
> >>and tk 8.3.5-92.4, so it doesn't appear to be specific to a brand of 
> >>Linux/version of Tk/Tcl.
> >>
> >>If anyone can suggest where I go from here, I'd be most grateful to hear 
> >>from you!
> >>
> >>package require vtk
> >>package require vtkinteraction
> >>
> >># Create the render window to pass to the vtkTkRenderWidget
> >>vtkRenderWindow renWin1
> >>renWin1 StereoCapableWindowOn
> >># At this point the window is stereo capable
> >>puts stdout [renWin1 Print]
> >>
> >>set renderWidget [vtkTkRenderWidget .ren -width 400 -height 400 -r 
> >>renWin1]
> >>::vtk::bind_tk_render_widget $renderWidget
> >>wm protocol . WM_DELETE_WINDOW ::vtk::cb_exit
> >>pack $renderWidget
> >>
> >># Return the render window from the vtkTkRenderWidget
> >>set renWin [$renderWidget GetRenderWindow]
> >>
> >># This should be the same window as was created before, but it is not 
> >>stereo capapble
> >>puts stdout [$renWin Print]
> >>
> >>$renWin SetStereoTypeToCrystalEyes
> >>$renWin StereoRenderOn
> >>
> >>vtkRenderer ren
> >>$renWin AddRenderer ren
> >>vtkConeSource cone
> >>cone SetResolution 16
> >>vtkPolyDataMapper coneMapper
> >>coneMapper SetInput [cone GetOutput]
> >>vtkActor coneActor
> >>coneActor SetMapper coneMapper
> >>ren AddActor coneActor
> >>
> >>$renderWidget Render
> >>tkwait window .
> >>    
> >
> >I have tried your code on a Linux machine here.  The script works fine
> >and I get an active stereo image.
> >
> >Furthermore, you say in your Tcl/Tk code that $renWin should be the same
> >window as $renWin1, but that it is not.  How did you conclude that?  In
> >the output the script generated for me, the address of the two objects
> >was the same, but some parameters did indeed change.  Nevertheless, it
> >would seem to me that the two variables point to the same object in
> >memory, even though it gets modified by the initialization.
> >
> >I hope this helps.
> >
> >Kind regards,
> >
> >Michael
> >
> >
> >  
> 
> I am getting the render window in both cases (i.e. the address is the 
> same), but the problem is that the window I am returned from the 
> GetRenderWindow call is not stereo capable, whereas the initial one is. 
> I've pasted the output of running the script on my machine below so that 
> you can see the differences.
> 
> However, if this is working on your machine then it suggests that the 
> problem is just due to the configurations of the machines I'm using.
> 
> Could you possibly send me some details of the machine this is working 
> on for you? It would particularly helpful to know the processor, Linux 
> distribution you are running, Tk and Tcl versions, as well as the 
> version of VTK you are using.
> 
> Thanks again for all your help.
> 
> vtkXOpenGLRenderWindow (0x80f4bc0)
>  Debug: Off
>  Modified Time: 5
>  Reference Count: 1
>  Registered Events:
>    Registered Observers:
>      vtkObserver (0x80f4410)
>        Event: 2
>        EventName: DeleteEvent
>        Command: 0x80738c0
>        Priority: 0
>        Tag: 1
>  Erase: On
>  Window Name: Visualization Toolkit - OpenGL
>  Position: (0, 0)
>  Size: (0, 0)
>  Mapped: 0
>  OffScreenRendering: 0
>  Double Buffered: 1
>  DPI: 120
>  TileScale: (1, 1)
>  TileViewport: (0, 0, 1, 1)
>  Borders: On
>  IsPicking: Off
>  Double Buffer: On
>  Full Screen: Off
>  Renderers:
>    Debug: Off
>    Modified Time: 3
>    Reference Count: 1
>    Registered Events: (none)
>    Number Of Items: 0
>  Stereo Capable Window Requested: Yes
>  Stereo Render: Off
>  Point Smoothing: Off
>  Line Smoothing: Off
>  Polygon Smoothing: Off
>  Anti Aliased Frames: 0
>  Abort Render: 0
>  Current Cursor: 0
>  Desired Update Rate: 0.0001
>  Focal Depth Frames: 0
>  In Abort Check: 0
>  NeverRendered: 1
>  Interactor: 0
>  Motion Blur Frames: 0
>  Swap Buffers: On
>  Stereo Type: RedBlue
>  Number of Layers: 1
>  AccumulationBuffer Size 0
>  AlphaBitPlanes: Off
>  AnaglyphColorSaturation: 0.65
>  AnaglyphColorMask: 4 , 3
>  MultiSamples: 8
>  ContextId: 0
>  Color Map: 0
>  Display Id: 0x814dec0
>  Next Window Id: 0
>  Window Id: 0
> 
> 
> vtkXOpenGLRenderWindow (0x80f4bc0)
>  Debug: Off
>  Modified Time: 6
>  Reference Count: 3
>  Registered Events:
>    Registered Observers:
>      vtkObserver (0x8160788)
>        Event: 10
>        EventName: AbortCheckEvent
>        Command: 0x8160770
>        Priority: 0
>        Tag: 2
>      vtkObserver (0x80f4410)
>        Event: 2
>        EventName: DeleteEvent
>        Command: 0x80738c0
>        Priority: 0
>        Tag: 1
>  Erase: On
>  Window Name: Visualization Toolkit - OpenGL
>  Position: (0, 0)
>  Size: (400, 400)
>  Mapped: 1
>  OffScreenRendering: 0
>  Double Buffered: 1
>  DPI: 120
>  TileScale: (1, 1)
>  TileViewport: (0, 0, 1, 1)
>  Borders: On
>  IsPicking: Off
>  Double Buffer: On
>  Full Screen: Off
>  Renderers:
>    Debug: Off
>    Modified Time: 3
>    Reference Count: 1
>    Registered Events: (none)
>    Number Of Items: 0
>  Stereo Capable Window Requested: No
>  Stereo Render: Off
>  Point Smoothing: Off
>  Line Smoothing: Off
>  Polygon Smoothing: Off
>  Anti Aliased Frames: 0
>  Abort Render: 0
>  Current Cursor: 0
>  Desired Update Rate: 0.0001
>  Focal Depth Frames: 0
>  In Abort Check: 0
>  NeverRendered: 0
>  Interactor: 0x8155c20
>  Motion Blur Frames: 0
>  Swap Buffers: On
>  Stereo Type: RedBlue
>  Number of Layers: 1
>  AccumulationBuffer Size 0
>  AlphaBitPlanes: Off
>  AnaglyphColorSaturation: 0.65
>  AnaglyphColorMask: 4 , 3
>  MultiSamples: 8
>  ContextId: 0x80f3618
>  Color Map: 10485784
>  Display Id: 0x80a96f8
>  Next Window Id: 0
>  Window Id: 10485786
> 
> 
> Warning: In /home/jmht/VTK/VTK5.5/VTK/Rendering/vtkRenderWindow.cxx, 
> line 196
> vtkXOpenGLRenderWindow (0x80f4bc0): Adjusting stereo mode on a window 
> that does not support stereo type CrystalEyes is not possible.

The main (related) difference I can see is that the second output of the
render window, with out it says "Stereo Capable Window Requested: No",
while with me it says "Stereo Capable Window Requested: Yes", which
corresponds with the first output (also in your case).  Strange.

But I can see some other minor differences which might come from a VTK
version mismatch.  On the machine here we're using a CVS version:
'vtk version 5.1.0, vtk source $Revision: 1.2385 $, $Date: 2006/03/20
12:55:18 $ (GMT)' (string returned from
vtk.vtkVersion.GetVTKSourceVersion() from python).
Tcl/Tk is version 8.3.5, installed from an RPM package from RedHat for
the Linux distribution we're using: Fedora Core 1.
Python is version 2.2.3, also RedHat RPM for Fedora Core 1.

I hope this helps.

Kind regards,

Michael




More information about the vtkusers mailing list