[vtkusers] Insert raw openGL calls in vtk
Sergio Vera
sergio.vera at alma3d.com
Wed Apr 1 11:01:47 EDT 2015
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20150401/2cd3b18d/attachment.html>
More information about the vtkusers
mailing list