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);