[vtkusers] Insert raw openGL calls in vtk
Sergio Vera
sergio.vera at alma3d.com
Fri Apr 10 03:42:59 EDT 2015
Dear Sankhesh and Aashish
many thanks for your heping advices.
I've finally made it work (more or less)
I did it by giving the opengl mapper a faked input as you suggested.
My opengl stuff is being actually drawn to the screen although it seems to
be heavily clipped and/or dissapearing depending on the polydata that I
provide as a "fake" input to my rawGLMapper.I guess is some part of the vtk
pipeline confused about having an actor with bogus bounds (the bounds of a
completely different polydata). Or perhaps something related to the depth /
color buffers or frustum clipping planes perhaps (i have to dig a little
more at it)
Many thanks
On Thu, Apr 2, 2015 at 6:48 PM, Sankhesh Jhaveri <
sankhesh.jhaveri at kitware.com> wrote:
> 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
>>
>>
>
--
Sergio Vera
Alma IT Systems
C/ Vilana, 4B, 4º 1ª
08022 Barcelona
T. (+34) 932 380 592
www.alma3d.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20150410/969072d9/attachment.html>
More information about the vtkusers
mailing list