[vtkusers] RE Request to VTK Multi-Pass Rendering

Rocco Gasteiger post at rocco-gasteiger.de
Thu Nov 26 07:03:33 EST 2009


Hi Stephane,

 

Thank you for your replay with an overview of the advanced rendering opportunities in VTK ! I will look at the ParaView-Example for the hidden lines removal. But the multipass-framework is still of interest for me because I want to use more sophisticated multipass-rendering techniques later. Ok, but for now I take a look insight painters. :-)

 

Best regards,

Rocco

 

 

From: Stephane PLOIX [mailto:stephane.ploix at edf.fr] 
Sent: Tuesday, November 24, 2009 11:58 AM
To: post at rocco-gasteiger.de
Cc: vtkusers at vtk.org
Subject: RE [vtkusers] Request to VTK Multi-Pass Rendering

 


Hi Rocco, 

Here is a general picture of the different ways you can implement advanced rendering effects in VTK : 
*shaders : each vtkProp can have a shader, this is mostly used in single pass algorithms 
*painters : you can implement a per-prop multipass algorithm in a painter, as is done in the plugin example in ParaView/Example/Plugins/HiddenLinesRemoval which does exactly what you need. 
*renderpass : this framework is intended for algorithm that need global information of all props : you can implement post-processing algorithms like screen-space ambient occlusion or edge-detection filters, and algorithms that require several passes of all the props, like shadow mapping. 

Best, 
Stephane





post at rocco-gasteiger.de 
Envoyé par : vtkusers-bounces at vtk.org 

23/11/2009 10:51 


A

vtkusers at vtk.org 


cc

	

Objet

[vtkusers] Request to VTK Multi-Pass Rendering

 

		




Dear VTK users, 
  
I want to use the new mulit-pass framework in VTK implemented by François Bertel. At first, many thanks François for implementing this framework! I need some multipass rendering for my research project and I think you have provided a very good base for start-up with this. 
  
For a better understanding how it works, I tried to adopt a native multi-pass OpenGL example in VTK, with help of the given framework. In doing so I oriented me at the given examples on the according VTK Wiki sites. Unfortunately, I did not get the same result in VTK like in OpenGL. I think I miss some important facts of understanding the VTK rendering pipeline. So I hope somebody (maybe François directly) can help me to have a better understanding of how the framework works.  Here comes what I really do: 
  
In OpenGL I implemented an algorithm for hidden line removing (It is based on the paper of Jarek R. Rossignac and Maarten van Emerik: Hidden contours on a frame-buffer (1992) ). Here is a snippet of my OpenGL code, where I have to render my geometry two times (2-passes). 
  
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glEnable(GL_DEPTH_TEST); 
glColor3f(0,0,0); 
  
// Settings for first pass 
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE,GL_FALSE); 
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 
drawMyGeometryWithSolidFaces(); 
  
// Settings for second pass 
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE,GL_TRUE); 
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 
glEnable(GL_POLYGON_OFFSET_LINE); 
glPolygonOffset(-1.0,1.0); 
drawMyGeometryWithSolidFaces(); 
  
// Reset polygon offsest 
glDisable(GL_POLYGON_OFFSET_FILL); 
  
  
In VTK I derived a class “vtkHiddenLineDesignerPass” from “vtkRenderPass” and tried to implement the same OpenGL steps. The result is, that still all lines are rendered, also the hidden lines. I use the following lines of code snippets in the “Render(const vtkRenderState *s)”-function to adopt the OpenGL-code with VTK datastructures and calls: 
  
//** Getting necessary VTK-objects to turn on/off some OpenGL-states.**/ 
vtkOpenGLRenderer *r=static_cast<vtkOpenGLRenderer *>(s->GetRenderer()); 
vtkActor *actor = r->GetActors()->GetLastActor(); 
vtkPolyDataMapper *actorMapper = static_cast<vtkPolyDataMapper*>(actor->GetMapper()); 
vtkProperty *actorProp = actor->GetProperty(); 
                               
// Settings for the first pass // 
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE,GL_FALSE); 
actorProp->SetRepresentationToSurface(); //** For glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);**// 
this->DelegatePass->Render(s); 
this->NumberOfRenderedProps += this->DelegatePass->GetNumberOfRenderedProps(); 
  
// Settings for the second pass // 
actorProp->SetDiffuseColor(0,0,0); //** For glColor3f(0,0,0); **// 
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE,GL_TRUE); 
actorProp->SetRepresentationToWireframe();  //** For glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); **// 
actorMapper->SetResolveCoincidentTopology(1); 
actorMapper->SetResolveCoincidentTopologyToPolygonOffset(); 
actorMapper->SetResolveCoincidentTopologyPolygonOffsetFaces(0); //** For glEnable(GL_POLYGON_OFFSET_LINE);**// 
actorMapper->SetResolveCoincidentTopologyPolygonOffsetParameters(-1.0,1); //** For glPolygonOffset(-1.0,1.0);**// 
                
this->DelegatePass->Render(s); 
this->NumberOfRenderedProps += this->DelegatePass->GetNumberOfRenderedProps(); 
actorMapper->SetResolveCoincidentTopology(0); //** For glDisable(GL_POLYGON_OFFSET_FILL);**// 
  
  
In my VTK-class, where I use this rendering pass, I process following rendering pipeline: 
// The elementary passes. 
vtkLightsPass *lights=vtkLightsPass::New(); 
vtkDefaultPass *defaultPass=vtkDefaultPass::New(); 
                
// Put them in a sequence. 
vtkRenderPassCollection *passes=vtkRenderPassCollection::New(); 
passes->AddItem(lights); 
passes->AddItem(defaultPass); 
  
vtkSequencePass *seq=vtkSequencePass::New(); 
seq->SetPasses(passes); 
  
// Make the sequence the delegate of a camera pass. 
vtkCameraPass *cameraP=vtkCameraPass::New(); 
cameraP->SetDelegatePass(seq); 
  
// Create the hidden line removing pass and attach the camera pass as its delegate 
vtkHiddenLineDesignerPass *myPass=vtkHiddenLineDesignerPass::New(); 
myPass ->SetDelegatePass(cameraP); 
                
vtkRenderer* renderer01= vtkRenderer::New(); 
renderer01->SetPass(myPass); 
  
  
Especially, my misunderstanding relies on when to use native OpenGL-code and when using VTK-calls. I tried some variations of  the code, presented above but without success. It would be very helpful if someone can give me some hints. 
  
Many thanks in advance, 
Rocco Gasteiger 
  
  
-------------------------------------------------- 
Dipl.-Ing. Rocco Gasteiger 
Otto-von-Guericke University
Faculty of Computer Science
Department of Simulation and Graphics
Universitätsplatz 2, 39106 Magdeburg, Germany 
  
Office:  G29-223 
Phone:   +49 391 67 127 59
Fax:     +49 391 67 111 64 
Website: http://wwwisg.cs.uni-magdeburg.de/cvcms/  
-------------------------------------------------- 
  
  
  
  
  
  
 _______________________________________________
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

Follow this link to subscribe/unsubscribe:
http://www.vtk.org/mailman/listinfo/vtkusers

 
 
 
Ce message et toutes les pièces jointes (ci-après le 'Message') sont établis à l'intention exclusive des destinataires et les informations qui y figurent sont strictement confidentielles. Toute utilisation de ce Message non conforme à sa destination, toute diffusion ou toute publication totale ou partielle, est interdite sauf autorisation expresse.
 
Si vous n'êtes pas le destinataire de ce Message, il vous est interdit de le copier, de le faire suivre, de le divulguer ou d'en utiliser tout ou partie. Si vous avez reçu ce Message par erreur, merci de le supprimer de votre système, ainsi que toutes ses copies, et de n'en garder aucune trace sur quelque support que ce soit. Nous vous remercions également d'en avertir immédiatement l'expéditeur par retour du message.
 
Il est impossible de garantir que les communications par messagerie électronique arrivent en temps utile, sont sécurisées ou dénuées de toute erreur ou virus.
____________________________________________________
 
This message and any attachments (the 'Message') are intended solely for the addressees. The information contained in this Message is confidential. Any use of information contained in this Message not in accord with its purpose, any dissemination or disclosure, either whole or partial, is prohibited except formal approval.
 
If you are not the addressee, you may not copy, forward, disclose or use any part of it. If you have received this message in error, please delete it and all copies from your system and notify the sender immediately by return message.
 
E-mail communication cannot be guaranteed to be timely secure, error or virus-free.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20091126/55287110/attachment.htm>


More information about the vtkusers mailing list