Hi again,<br><br>As per my previous problem of mixing 2d and 3d actors in the same scene, I thought it might be a graphics card problem. So, I managed to get another windows machine (I was using Linux before) but I still see the same problem.... the 2d actor only gets displayed when I do a pick operation on the 3d actor.... This is completely bizarre and after several days I have come with no explanation for that. I have stepped through the renderer code multiple times during debug, but see nothing that could offer some kind of explanation.
<br><br>I really wish someone here would take a look at this very trivial code and see if they could point something out. I tried to convert everything in my code to 3d actors but that presents another set of complications, unfortunately.
<br><br>I am attaching the code again. I really request someone to please help me. It will not take too much of your time. The code is really small and functional.<br><br>#include "vtkImageData.h"<br>#include "
vtkImageActor.h"<br>#include "vtkActor2D.h"<br>#include "vtkRenderWindow.h"<br>#include "vtkRenderer.h"<br>#include "vtkRenderWindowInteractor.h"<br>#include "vtkImageMapper.h
"<br>#include "vtkPNGReader.h"<br>#include "vtkImageChangeInformation.h"<br><br>int main ()<br>{<br> // Read the image<br> vtkPNGReader * cursorImage = vtkPNGReader::New();<br> // Please replace with your own path
<br> cursorImage->SetFileName("C:\\crosshair.png");<br> cursorImage->Update();<br> // Shift center to image data oigin<br> vtkImageChangeInformation * imageChange = vtkImageChangeInformation::New();
<br> imageChange->SetInput(cursorImage->GetOutput());<br> imageChange->CenterImageOn(); <br><br> // create actor2d<br> vtkImageMapper * mapper = vtkImageMapper::New();<br> mapper->SetInput(imageChange->GetOutput());
<br> mapper->SetColorWindow(256.0);<br> mapper->SetColorLevel(128.0);<br> vtkActor2D * actor2d = vtkActor2D::New();<br> actor2d->SetMapper(mapper);<br> actor2d->SetPosition(120.0, 100.0);<br><br>
// create actor 3d<br> vtkImageActor * actor3d = vtkImageActor::New();<br> actor3d->SetInput(imageChange->GetOutput());<br><br> // following lines creates our 2 layers of renderers <br> vtkRenderer *ren1 = vtkRenderer::New(); // 2d actor
<br> ren1->AddViewProp(actor2d); <br> ren1->SetLayer(0); // bottom layer <br><br> vtkRenderer *ren2 = vtkRenderer::New();<br> ren2->AddViewProp(actor3d); // 3d actor <br> ren2->SetLayer(1); // top layer
<br><br> vtkRenderWindow *renWin = vtkRenderWindow::New(); <br> renWin->SetNumberOfLayers(2); // we have 2 layers of renderers in our window <br> renWin->AddRenderer(ren1);<br> renWin->AddRenderer(ren2);
<br><br> vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); // an interactor<br> iren->SetRenderWindow(renWin);<br> renWin->Render(); <br> iren->Start();<br> <br> // We will not bother with deletions...program is ending anyways...
<br> return 0;<br>} <br><br>The crosshair.png image can be downloaded from here...<br><br><a href="http://pligame.sourceforge.net/images/crosshair.png">http://pligame.sourceforge.net/images/crosshair.png</a><br><br> <br>
Cheers,<br><br>Anja