[vtkusers] Win32 OffScreen Rendering and Visibility cell selector

David E DeMarle dave.demarle at kitware.com
Thu Mar 22 13:27:42 EDT 2007


Hmmm, the program looks ok to me, with the exception of two calls to a
"render" instead of "ofsrender".
I will try cell selection with offscreen rendering on windows and see if I
can reproduce the problem.

cheers
Dave DeMarle


On 3/20/07, Lim, Theodore <T.Lim at hw.ac.uk> wrote:
>
>  Hi,
>
> Not sure how to put this but here goes...
>
> I'm trying to get get visible cell data for a series of camera positions
> and would like to do this using the Win32 offscreen rendering capabilities.
>
> However, i discovered that the offscreen render window color buffer size
> returns all 0 values. This seems to be the reason why the visible cell
> selector fails. Is there a way to set (or force) values into it?
>
> Or rather, can the new class vtkVisibilityCellSelector be used in
> Offscreen rendering mode? And if so, how can this be achieved. I've attached
> the code which i'm testing below.
>
> One note: i compiled with cmake option VTK_USE_OFFSCREEN set to 'Off' as
> this caused the vtkMFC examples (i.e. vtkDLG, vtkSDI, vtkMDI) to crash. It
> also caused the same response to my own VTK-MFC app. Not sure if this has
> anything to do with it not being able to use Offscreen. In the test code
> below, i use the vtkWindowToImageFilter to grab a snapshot of the offscreen
> render window and the results was as expected.
>
> Any help would be greatly appreciated.
>
> Many thanks, Theo.
>
>
> /**************************************************************************************************/
> int main()
> {
>  //Load model
>  vtkSmartPointer<vtkSTLReader> reader =
> vtkSmartPointer<vtkSTLReader>::New();
>  reader->SetFileName("C:/Model/Data/MillCut.stl");
>  vtkSmartPointer<vtkPolyDataMapper> map1 =
> vtkSmartPointer<vtkPolyDataMapper>::New();
>  map1->SetInput(reader->GetOutput());
>
>  // set up offscreen renderer
>  vtkSmartPointer<vtkRenderer> ofsrenderer =
> vtkSmartPointer<vtkRenderer>::New();
>  ofsrenderer->SetBackground(0.0,0.0,0.0);
>  vtkSmartPointer<vtkRenderWindow> ofsrenWin =
> vtkSmartPointer<vtkRenderWindow>::New();
>  ofsrenWin->AddRenderer(ofsrenderer);
>  ofsrenWin->SetSize(800,800);
>  ofsrenWin->SetOffScreenRendering(1);
>  // set interactor
>  vtkSmartPointer<vtkRenderWindowInteractor> iren =
> vtkSmartPointer<vtkRenderWindowInteractor>::New();
>  iren->SetRenderWindow(ofsrenWin);
>
>  //set up the view
>  renderer->GetActiveCamera()->SetViewUp(0, 1, 0);
>  renderer->SetBackground(0.0,0.0,0.0);
>
>
>  // set actor
>  vtkSmartPointer<vtkActor> act1 = vtkSmartPointer<vtkActor>::New();
>  act1->SetMapper(map1);
>  // add actor to renderer
>  double diagonal = act1->GetLength();
>  double *center = act1->GetCenter();
>  ofsrenderer->AddActor(act1);
>  ofsrenderer->GetActiveCamera()->SetFocalPoint(center);
>  ofsrenderer->GetActiveCamera()->SetPosition(20, -20, -27);
>  ofsrenderer->ResetCamera();
>
>  ofsrenWin->Render();
>  //-----------------------------------------------
>  // check offscreen render window...
>  int rgba[4];
>  ofsrenWin->GetColorBufferSizes(rgba);
>  vtkSmartPointer<vtkWindowToImageFilter> wif =
> vtkSmartPointer<vtkWindowToImageFilter>::New();//
>  wif->SetInput(ofsrenWin);
>  wif->Update();
>  vtkSmartPointer<vtkJPEGWriter> jpgw =
> vtkSmartPointer<vtkJPEGWriter>::New();
>  jpgw->SetInput(wif->GetOutput());
>  jpgw->SetQuality(100);
>  jpgw->SetFileName("D:/Projects/VTK/testoffscreen.jpg");
>  jpgw->Write();
>  //-----------------------------------------------
>
>  // get visible cells
>  vtkSmartPointer<vtkVisibleCellSelector> sel1 =
> vtkSmartPointer<vtkVisibleCellSelector>::New();
>  sel1->SetRenderer(ofsrenderer);
>         // grab everything in the render window viewport
>  int *size = ofsrenderer->GetRenderWindow()->GetSize();
>  sel1->SetRenderPasses(0,1,0,1,1);
>  sel1->SetArea(size[0],size[1],size[2],size[3]);
>  sel1->Select();
>  vtkSmartPointer<vtkSelection> res1 =
> vtkSmartPointer<vtkSelection>::New();
>  sel1->GetSelectedIds(res1);
>  vtkSmartPointer<vtkSelection> cellids = res1->GetChild(0);
>  vtkSmartPointer<vtkExtractSelectedPolyDataIds> extr =
> vtkSmartPointer<vtkExtractSelectedPolyDataIds>::New();
>         if (cellids)
>          {
>           extr->SetInput(1, act1->GetMapper()->GetInput());
>           extr->SetInput(0, cellids);
>           extr->Update();
>           sMap->SetInput(extr->GetOutput());
>          }
>         else
>          {
>           cerr << "Empty color buffer selection -" << endl;
>           cerr << "Check display color depth. Must be at least 24 bit." <<
> endl;
>           sMap->SetInput(emptyPD);
>          }
>  ////////////////////////////////////////////////////////////
>  ofsrenWin->Render();
>
>  // Set the user method (bound to key 'u')
>  iren->Initialize();
>  iren->Start();
>
>  return 0;
> }
>
>
>
> _______________________________________________
> This is the private VTK discussion list.
> Please keep messages on-topic. Check the FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20070322/606617d7/attachment.htm>


More information about the vtkusers mailing list