[vtkusers] Win32 OffScreen Rendering and Visibility cell selector
Lim, Theodore
T.Lim at hw.ac.uk
Fri Mar 23 05:03:59 EDT 2007
David,
Many thanks. I'll try it out and let the list know.
Cheers, Theo.
________________________________
From: David E DeMarle [mailto:dave.demarle at kitware.com]
Sent: Thu 22/03/2007 19:12
To: Lim, Theodore
Cc: vtk-users
Subject: Re: [vtkusers] Win32 OffScreen Rendering and Visibility cell selector
I've just committed a change to vtkOpenGLRenderWindow which appears to fix it. The change is to return default values if the window isn't mapped like getColorDepth does.
cheers
Dave DeMarle
On 3/22/07, David E DeMarle <dave.demarle at kitware.com> wrote:
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 <mailto: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/20070323/c76861ac/attachment.htm>
More information about the vtkusers
mailing list