在VTK中使用Opengl代码

来源:互联网 发布:linux finger不存在 编辑:程序博客网 时间:2024/06/08 04:26

vtk内部是基于opengl来绘制图形的,所以opengl代码可以在vtk程序中使用。

下面简单介绍一下如何在在VTK中使用Opengl代码

在vtkProp类中有四个绘制图形的函数分别如下:

 virtual int RenderOpaqueGeometry(vtkViewport *) { return 0; }

   virtual int RenderTranslucentPolygonalGeometry( vtkViewport *) { return 0; }

   virtual int RenderVolumetricGeometry( vtkViewport *) { return 0; } 

   virtual int RenderOverlay( vtkViewport *) { return 0; }   

  这四个函数在vtk内部程序中按照固定顺序执行。


方法就是

写一个 vtkMyDerivedVtkProp 类  由 vtkProp派生。然后可以重载以上任意成员函数,在成员函数中你可以写任意的opengl相关代码。注意:重载不同的成员函数,也许最后的绘制效果不同。因为两个物体中,若一个用vtk的函数绘制,另一个用派生的类成员函数绘制,那么重载不同的成员函数,则造成绘制两个物体的顺序不同。这就影响最后的结果。

vtkMyDerivedProp.h

class  vtkMyDerivedProp : public vtkProp{public:vtkTypeRevisionMacro(vtkMyDerivedProp,vtkProp);void PrintSelf(ostream& os, vtkIndent indent);static vtkMyDerivedProp* New();int RenderVolumetricGeometry(vtkViewport *);    vtkCloud * pCloud;vtkCamera * RtCamera;protected:vtkMyDerivedProp();~vtkMyDerivedProp();private:vtkMyDerivedProp(const vtkMyDerivedProp&);  // Not implemented.   void operator=(const vtkMyDerivedProp&);  // Not implemented.  };



vtkMyDerivedProp.cpp

#include "c:\vtk\vc\include\vtk-5.2\vtkViewPort.h"#include "c:\vtk\vc\include\vtk-5.2\vtkObjectFactory.h"#include "vtkMyDerivedProp.h"vtkCxxRevisionMacro(vtkMyDerivedProp, "$Revision: 1.36 $");vtkStandardNewMacro(vtkMyDerivedProp);vtkMyDerivedProp::vtkMyDerivedProp(){}vtkMyDerivedProp::~vtkMyDerivedProp(){}void vtkMyDerivedProp::PrintSelf(ostream& os, vtkIndent indent){this->Superclass::PrintSelf(os,indent);}int vtkMyDerivedProp::RenderVolumetricGeometry(vtkViewport * ){    // OpenGl代码    glBegin(GL_QUADS);    glColor3f(1.0,0.0,0.0);    glVertex3f(-2.0,-2.0,10.0);    glVertex3f(2.0,-2.0,10.0);    glVertex3f(2.0,2.0,10.0);    glVertex3f(-2.0,2.0,10.0);    glEnd();   return 1;}

在主函数加入

vtkMyDerivedProp *derivedprop ;derivedprop = vtkMyDerivedProp::New();renderer->AddViewProp(derivedprop);




原创粉丝点击