[vtkusers] Insert raw openGL calls in vtk

Sankhesh Jhaveri sankhesh.jhaveri at kitware.com
Thu Apr 2 12:48:22 EDT 2015


Hello Sergio,

A couple of things:

1. If you look at the vtkPolyDataMapper::Render() method, it calls
RenderPiece only if there is input information set on the mapper. I guess
your code does not provide an input to the mapper, and hence, RenderPiece
(and Draw) is not called.

2. The vtkRenderer::Render() method clears the color and depth buffers by
default. You'll have to work around that to make sure the GL objects are
preserved.

Hope that helps.



Best Regards,

Sankhesh Jhaveri
Research & Development Engineer
Kitware, Inc.
*Phone*: (518) 881 4417
*Fax*: (518) 371 4573



On Wed, Apr 1, 2015 at 11:01 AM, Sergio Vera <sergio.vera at alma3d.com> wrote:

> Dear Aashish,
>
> thanks for your time. At the moment it is kinda difficult to switch to
> OpenGL2 backend, manily because the VTK (5.10) we use is pulled by the CTK
> superbuild. I could try to switch to the experimental branch of CTK with
> support for vtk 6 and try to modifly the superbuild so VTK uses the OpenGL2
> backend.
>
> Currently I'm testing stuff using this toy example (based on a VTK example)
>
> #include <iostream>
> #include <vtkProp3D.h>
> #include <vtkVersion.h>
> #include <vtkSmartPointer.h>
> #include <vtkCellArray.h>
> #include <vtkCellData.h>
> #include <vtkDoubleArray.h>
> #include <vtkPoints.h>
> #include <vtkLine.h>
> #include <vtkPolyData.h>
> #include <vtkPolyDataMapper.h>
> #include <vtkActor.h>
> #include <vtkRenderWindow.h>
> #include <vtkRenderer.h>
> #include <vtkRenderWindowInteractor.h>
> #include <vtkOpenGL.h> // For export macro
> #include <vtkObjectFactory.h>
> #include <vtkMapper.h>
> #include <vtkOpenGLPolyDataMapper.h>
> #include <vtkgl.h>
> #include <vtkViewport.h>
>
> #include <GL/gl.h>
>
> class  myMapper : public vtkOpenGLPolyDataMapper
> {
> public:
>     static myMapper *New();
>     vtkTypeMacro(myMapper, vtkOpenGLPolyDataMapper);
>
>     virtual void RenderPiece(vtkRenderer *aren, vtkActor *act);
>     virtual int Draw(vtkRenderer *aren, vtkActor *act);
>
> protected:
>
> private:
>
> };
>
> vtkStandardNewMacro(myMapper);
>
> void
> myMapper::RenderPiece(vtkRenderer* a_ren, vtkActor* a_act)
> {
>   std::cout << "RenderPiece" << std::endl;
>   glDisable( GL_LIGHTING);
>     glBegin(GL_LINES);
>     glVertex3f(0, 1, 0);
>     glVertex3f(1, 1., 0.);
>     glEnd();
> }
>
> int
> myMapper::Draw(vtkRenderer* a_ren, vtkActor* a_act)
> {
>     std::cout << "Draw" << std::endl;
>
>     glDisable( GL_LIGHTING);
>     glBegin(GL_LINES);
>     glVertex3f(0, 1, 0);
>     glVertex3f(1, 1., 0.);
>     glEnd();}
>
>
> int main(int, char *[])
> {
>   std::cout << "Main" << std::endl;
>   // Create three points. Join (Origin and P0) with a red line and
>   // (Origin and P1) with a green line
>   double origin[3] = {0.0, 0.0, 0.0};
>   double p0[3] = {1.0, 0.0, 0.0};
>   double p1[3] = {0.0, 1.0, 0.0};
>
>   // Create a vtkPoints object and store the points in it
>   vtkSmartPointer<vtkPoints> pts =
>     vtkSmartPointer<vtkPoints>::New();
>   pts->InsertNextPoint(origin);
>   pts->InsertNextPoint(p0);
>   pts->InsertNextPoint(p1);
>
>   // Setup two colors - one for each line
>   unsigned char red[3] = {255, 0, 0};
>   unsigned char green[3] = {0, 255, 0};
>
>   // Setup the colors array
>   vtkSmartPointer<vtkUnsignedCharArray> colors =
>     vtkSmartPointer<vtkUnsignedCharArray>::New();
>   colors->SetNumberOfComponents(3);
>   colors->SetName("Colors");
>
>   // Add the colors we created to the colors array
>   colors->InsertNextTupleValue(red);
>   colors->InsertNextTupleValue(green);
>
>   // Create the first line (between Origin and P0)
>   vtkSmartPointer<vtkLine> line0 =
>     vtkSmartPointer<vtkLine>::New();
>   line0->GetPointIds()->SetId(0,0); //the second 0 is the index of the
> Origin in the vtkPoints
>   line0->GetPointIds()->SetId(1,1); //the second 1 is the index of P0 in
> the vtkPoints
>
>   // Create the second line (between Origin and P1)
>   vtkSmartPointer<vtkLine> line1 =
>     vtkSmartPointer<vtkLine>::New();
>   line1->GetPointIds()->SetId(0,0); //the second 0 is the index of the
> Origin in the vtkPoints
>   line1->GetPointIds()->SetId(1,2); //2 is the index of P1 in the vtkPoints
>
>   // Create a cell array to store the lines in and add the lines to it
>   vtkSmartPointer<vtkCellArray> lines =
>     vtkSmartPointer<vtkCellArray>::New();
>   lines->InsertNextCell(line0);
>   lines->InsertNextCell(line1);
>
>   // Create a polydata to store everything in
>   vtkSmartPointer<vtkPolyData> linesPolyData =
>     vtkSmartPointer<vtkPolyData>::New();
>
>   // Add the points to the dataset
>   linesPolyData->SetPoints(pts);
>
>   // Add the lines to the dataset
>   linesPolyData->SetLines(lines);
>
>   // Color the lines - associate the first component (red) of the
>   // colors array with the first component of the cell array (line 0)
>   // and the second component (green) of the colors array with the
>   // second component of the cell array (line 1)
>   linesPolyData->GetCellData()->SetScalars(colors);
>
>   // Visualize
>   vtkSmartPointer<vtkPolyDataMapper> mapper =
>     vtkSmartPointer<vtkPolyDataMapper>::New();
> #if VTK_MAJOR_VERSION <= 5
>   mapper->SetInput(linesPolyData);
> #else
>   mapper->SetInputData(linesPolyData);
> #endif
>
>   vtkSmartPointer<vtkActor> actor =
>     vtkSmartPointer<vtkActor>::New();
>   actor->SetMapper(mapper);
>
>   vtkSmartPointer<myMapper> mapperGL =
>     vtkSmartPointer<myMapper>::New();
>
>
>   vtkSmartPointer<vtkActor> actorGL =
>     vtkSmartPointer<vtkActor>::New();
>   actorGL->SetMapper(mapperGL);
>
>   vtkSmartPointer<vtkRenderer> renderer =
>     vtkSmartPointer<vtkRenderer>::New();
>   vtkSmartPointer<vtkRenderWindow> renderWindow =
>     vtkSmartPointer<vtkRenderWindow>::New();
>   renderWindow->AddRenderer(renderer);
>   vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
>       vtkSmartPointer<vtkRenderWindowInteractor>::New();
>   renderWindowInteractor->SetRenderWindow(renderWindow);
>   renderer->AddActor(actor);
>   renderer->AddActor(actorGL);
>
>   renderWindow->Render();
>   renderWindowInteractor->Start();
>
>   return EXIT_SUCCESS;
> }
>
>
>
> when I run the above code, I see the vtk lines but the OpenGL lines are
> missing and no output is printed in the console signaling that the code is
> being called.
>
>
> thanks for your time
>
>
>
>
> On Wed, Apr 1, 2015 at 3:23 PM, Aashish Chaudhary <
> aashish.chaudhary at kitware.com> wrote:
>
>> It's much harder In OpenGL backend because of the architecture. If you
>> can provide more detail on exactly what you did, we could probably help. I
>> would suggest switching to OpenGL2 backend.
>>
>> - Aashish
>>
>> On Wed, Apr 1, 2015 at 4:33 AM, Sergio Vera <sergio.vera at alma3d.com>
>> wrote:
>>
>>>
>>> I'm using the OpenGL backend since I'm using vtk5.10 (CTK compatibility)
>>>
>>> On Tue, Mar 31, 2015 at 6:38 PM, Aashish Chaudhary <
>>> aashish.chaudhary at kitware.com> wrote:
>>>
>>>> Are using OpenGL2 or OpenGL backend?
>>>>
>>>> On Tue, Mar 31, 2015 at 12:13 PM, Sergio Vera <sergio.vera at alma3d.com>
>>>> wrote:
>>>>
>>>>> Thanks,
>>>>> I've derived from vtkOpenGLPolyDataMapper, attached the mapper to an
>>>>> ordinary actor and added the actor to the renderer.
>>>>> It seems that neigher Draw() nor RenderPiece() methods of the mapper
>>>>> are being called and  my simple gl code snipped is not being rendered.
>>>>>
>>>>> Any additional hints?
>>>>>
>>>>> Thanks in advance
>>>>>
>>>>> On Tue, Mar 31, 2015 at 4:15 PM, Aashish Chaudhary <
>>>>> aashish.chaudhary at kitware.com> wrote:
>>>>>
>>>>>> there is no easy way. You will have to write your own
>>>>>> mapper.
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Tue, Mar 31, 2015 at 7:17 AM, Sergio Vera <sergio.vera at alma3d.com>
>>>>>> wrote:
>>>>>>
>>>>>>>
>>>>>>> Hello vtk Users
>>>>>>>
>>>>>>> I'm trying to insert opengl calls inside vtk. So far I have seen
>>>>>>> examples of the opposite, insert vtk into opengl.
>>>>>>>
>>>>>>> There is the suggestion somewhere on the list of using the render
>>>>>>> methods of vtkMapper or vtkprops but no definite example
>>>>>>>
>>>>>>> Where is the best way to do it?
>>>>>>>
>>>>>>> thanks in advance
>>>>>>> --
>>>>>>> Sergio Vera
>>>>>>>
>>>>>>>  Alma IT Systems
>>>>>>>  C/ Vilana, 4B, 4º 1ª
>>>>>>>  08022 Barcelona
>>>>>>>  T. (+34) 932 380 592
>>>>>>>  www.alma3d.com
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> 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
>>>>>>>
>>>>>>> Search the list archives at: http://markmail.org/search/?q=vtkusers
>>>>>>>
>>>>>>> Follow this link to subscribe/unsubscribe:
>>>>>>> http://public.kitware.com/mailman/listinfo/vtkusers
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>>
>>>>>>
>>>>>> *| Aashish Chaudhary | Technical Leader         | Kitware Inc.
>>>>>>     *
>>>>>> *| http://www.kitware.com/company/team/chaudhary.html
>>>>>> <http://www.kitware.com/company/team/chaudhary.html>*
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Sergio Vera
>>>>>
>>>>>  Alma IT Systems
>>>>>  C/ Vilana, 4B, 4º 1ª
>>>>>  08022 Barcelona
>>>>>  T. (+34) 932 380 592
>>>>>  www.alma3d.com
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>>
>>>>
>>>>
>>>> *| Aashish Chaudhary | Technical Leader         | Kitware Inc.
>>>>   *
>>>> *| http://www.kitware.com/company/team/chaudhary.html
>>>> <http://www.kitware.com/company/team/chaudhary.html>*
>>>>
>>>
>>>
>>>
>>> --
>>> Sergio Vera
>>>
>>>  Alma IT Systems
>>>  C/ Vilana, 4B, 4º 1ª
>>>  08022 Barcelona
>>>  T. (+34) 932 380 592
>>>  www.alma3d.com
>>>
>>
>>
>>
>> --
>>
>>
>>
>> *| Aashish Chaudhary | Technical Leader         | Kitware Inc.
>> *
>> *| http://www.kitware.com/company/team/chaudhary.html
>> <http://www.kitware.com/company/team/chaudhary.html>*
>>
>
>
>
> --
> Sergio Vera
>
>  Alma IT Systems
>  C/ Vilana, 4B, 4º 1ª
>  08022 Barcelona
>  T. (+34) 932 380 592
>  www.alma3d.com
>
> _______________________________________________
> 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
>
> Search the list archives at: http://markmail.org/search/?q=vtkusers
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/vtkusers
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20150402/a97f61ba/attachment.html>


More information about the vtkusers mailing list